Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Property references not expanded in version property of platform.txt #1823

Closed
3 tasks done
per1234 opened this issue Aug 4, 2022 · 0 comments · Fixed by #1830
Closed
3 tasks done

Property references not expanded in version property of platform.txt #1823

per1234 opened this issue Aug 4, 2022 · 0 comments · Fixed by #1830
Assignees
Labels
conclusion: resolved Issue was resolved criticality: medium Of moderate impact topic: code Related to content of the project itself type: imperfection Perceived defect in any part of project

Comments

@per1234
Copy link
Contributor

per1234 commented Aug 4, 2022

Describe the problem

When an Arduino boards platform is installed to <directories.user>/hardware without a version folder, Arduino CLI uses the version property of platform.txt to identify the platform's version.

The Arduino platform properties system allows us to reference previously defined properties within a property's definitions, and have those properties be expanded by Arduino CLI while processing the platform's configuration files.

🐛 Property reference expansion does not work in the version property of platform.txt. Arduino CLI panics while processing platforms installed to <directories.user> which have references in the version property.

To reproduce

$ arduino-cli version
arduino-cli.exe  Version: git-snapshot Commit: 2dd89766 Date: 2022-08-04T04:26:26Z

$ export ARDUINO_DIRECTORIES_USER="/tmp/arduino-cli-directories-user"

$ git clone https://github.com/SpenceKonde/DxCore --depth 1 -b 1.4.10 "${ARDUINO_DIRECTORIES_USER}/hardware/DxCore-dev"

$ sed -n 12,17p "${ARDUINO_DIRECTORIES_USER}/hardware/DxCore-dev/megaavr/platform.txt"
versionnum.major=1
versionnum.minor=4
versionnum.patch=10
versionnum.postfix=
versionnum.released=1
version={versionnum.major}.{versionnum.minor}.{versionnum.patch}{versionnum.postfix}

$ arduino-cli core list
panic: no major version found

goroutine 1 [running]:
go.bug.st/relaxed-semver.MustParse(...)
        C:/Users/per/go/pkg/mod/go.bug.st/relaxed-semver@v0.9.0/parser.go:18
github.com/arduino/arduino-cli/arduino/cores/packagemanager.(*PackageManager).loadPlatform(0xc0000764e0, 0xc0003a4c80, {0xc000499851, 0x0}, 0xc00006ad50)
        E:/electronics/git-nobackup/arduino-cli/arduino/cores/packagemanager/loader.go:199 +0x14a5
github.com/arduino/arduino-cli/arduino/cores/packagemanager.(*PackageManager).loadPlatforms(0xc0000764e0, 0xc0003a4c80, 0xc00006abf0)
        E:/electronics/git-nobackup/arduino-cli/arduino/cores/packagemanager/loader.go:166 +0x3aa
github.com/arduino/arduino-cli/arduino/cores/packagemanager.(*PackageManager).LoadHardwareFromDirectory(0xc0000764e0, 0xc00006b140)
        E:/electronics/git-nobackup/arduino-cli/arduino/cores/packagemanager/loader.go:124 +0xb58
github.com/arduino/arduino-cli/arduino/cores/packagemanager.(*PackageManager).LoadHardwareFromDirectories(0xc00024d5d8, {0xc00006b150, 0x2, 0xc00024d5d8})
        E:/electronics/git-nobackup/arduino-cli/arduino/cores/packagemanager/loader.go:50 +0xc9
github.com/arduino/arduino-cli/arduino/cores/packagemanager.(*PackageManager).LoadHardware(0xc0000764e0)
        E:/electronics/git-nobackup/arduino-cli/arduino/cores/packagemanager/loader.go:38 +0x3f
github.com/arduino/arduino-cli/commands.Init(0xc00024dbc8, 0xc00024dc18)
        E:/electronics/git-nobackup/arduino-cli/commands/instances.go:243 +0x34d
github.com/arduino/arduino-cli/cli/instance.InitWithProfile(0xc000044960, {0x0, 0x0}, 0x0)
        E:/electronics/git-nobackup/arduino-cli/cli/instance/instance.go:99 +0x20b
github.com/arduino/arduino-cli/cli/instance.CreateAndInitWithProfile({0x0, 0x0}, 0x8010103)
        E:/electronics/git-nobackup/arduino-cli/cli/instance/instance.go:53 +0x13f
github.com/arduino/arduino-cli/cli/instance.CreateAndInit(...)
        E:/electronics/git-nobackup/arduino-cli/cli/instance/instance.go:40
github.com/arduino/arduino-cli/cli/core.runListCommand(0xc000310c80, {0x1ba1418, 0x0, 0x0})
        E:/electronics/git-nobackup/arduino-cli/cli/core/list.go:52 +0x31
github.com/spf13/cobra.(*Command).execute(0xc000310c80, {0x1ba1418, 0x0, 0x0})
        C:/Users/per/go/pkg/mod/github.com/spf13/cobra@v1.2.1/command.go:860 +0x5f8
github.com/spf13/cobra.(*Command).ExecuteC(0xc000239400)
        C:/Users/per/go/pkg/mod/github.com/spf13/cobra@v1.2.1/command.go:974 +0x3bc
github.com/spf13/cobra.(*Command).Execute(...)
        C:/Users/per/go/pkg/mod/github.com/spf13/cobra@v1.2.1/command.go:902
main.main()
        E:/electronics/git-nobackup/arduino-cli/main.go:31 +0x77

🐛 What should be considered a perfectly valid platform configuration causes Arduino CLI to panic.

Expected behavior

Properties are expanded in the version property of platform.txt just as they are in any other property.

Arduino CLI version

2dd8976

Operating system

Windows, Ubuntu

Operating system version

Windows 10, Ubuntu 20.04

Additional context

This approach was supported up until Arduino IDE 1.8.14, and is in use in multiple prominent Arduino boards platforms, including:


Originally reported at:

Issue checklist

  • I searched for previous reports in the issue tracker
  • I verified the problem still occurs when using the nightly build
  • My report contains all necessary details
@per1234 per1234 added criticality: medium Of moderate impact topic: code Related to content of the project itself type: imperfection Perceived defect in any part of project labels Aug 4, 2022
@per1234 per1234 added the conclusion: resolved Issue was resolved label Aug 9, 2022
bearer-pipeline-test pushed a commit to BearerPipelineTest/arduino-cli that referenced this issue Aug 10, 2022
…rduino#1830)

* Added test for issue arduino#1823

* Do not assume that version in platforms.txt is correct semver

* When parsing version in platform.txt perform a variable replace

* Update internal/integrationtest/core/testdata/issue_1823/DxCore-dev/megaavr/README.md

* Update internal/integrationtest/core/core_list_test.go

Co-authored-by: per1234 <accounts@perglass.com>
This issue was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
conclusion: resolved Issue was resolved criticality: medium Of moderate impact topic: code Related to content of the project itself type: imperfection Perceived defect in any part of project
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants