PSResourceGet icon indicating copy to clipboard operation
PSResourceGet copied to clipboard

[0.9.0-rc1] Installed modules from GitHub Packages with upper case in name cannot be imported on Linux

Open jtomkiew-mng opened this issue 2 years ago • 8 comments

Prerequisites

  • [X] Write a descriptive title.
  • [X] Make sure you are able to repro it on the latest released version
  • [X] Search the existing issues.

Steps to reproduce

Install and import a module hosted on GitHub Packages that uses upper letters in the name:

Install-PSResource -Name 'lowercasemodule' # -Repository $packageSource.Name -Credential $cred -TrustRepository
Install-PSResource -Name 'PascalCaseModule' # -Repository $packageSource.Name -Credential $cred -TrustRepository

Import-Module 'lowercasemodule' -Force -Verbose
Import-Module 'PascalCaseModule' -Force -Verbose

Expected behavior

lowercasemodule and PascalCaseModule module are installed and imported.

Actual behavior

lowercasemodule module is installed and imported, while PascalCaseModule module is installed but fails to import.

Error details

--- lowercasemodule install starts here:
VERBOSE: All paths to search: '/home/runner/.local/share/powershell/Modules'
VERBOSE: All paths to search: '/home/runner/.local/share/powershell/Scripts'
VERBOSE: Retrieving directories in the path '/home/runner/.local/share/powershell/Modules'
VERBOSE: Retrieving directories in the path '/home/runner/.local/share/powershell/Scripts'
VERBOSE: All paths to search: '/home/runner/.local/share/powershell/Modules/Microsoft.PowerShell.PSResourceGet'
VERBOSE: Attempting to search for packages in 'github/jtomkiew-mng'
WARNING: Installing dependencies is not currently supported for V3 server protocol repositories. The package will be installed without installing dependencies.
WARNING: Installing dependencies is not currently supported for V3 server protocol repositories. The package will be installed without installing dependencies.
VERBOSE: Installation source path is: '/tmp/454ce253-7bfd-49f0-a0fb-beb0939a336c/lowercasemodule/1.0.0'
VERBOSE: Installation destination path is: '/home/runner/.local/share/powershell/Modules/lowercasemodule/1.0.0'
VERBOSE: Attempting to move '/tmp/454ce253-7bfd-49f0-a0fb-beb0939a336c/lowercasemodule/1.0.0' to '/home/runner/.local/share/powershell/Modules/lowercasemodule/1.0.0'
VERBOSE: Successfully installed package 'lowercasemodule' to location '/home/runner/.local/share/powershell/Modules'
VERBOSE: Attempting to delete '/tmp/454ce253-7bfd-49f0-a0fb-beb0939a336c'
VERBOSE: Successfully deleted '/tmp/454ce253-7bfd-49f0-a0fb-beb0939a336c'

--- PascalCaseModule install starts here:
VERBOSE: All paths to search: '/home/runner/.local/share/powershell/Modules'
VERBOSE: All paths to search: '/home/runner/.local/share/powershell/Scripts'
VERBOSE: Retrieving directories in the path '/home/runner/.local/share/powershell/Modules'
VERBOSE: Retrieving directories in the path '/home/runner/.local/share/powershell/Scripts'
VERBOSE: All paths to search: '/home/runner/.local/share/powershell/Modules/lowercasemodule'
VERBOSE: All paths to search: '/home/runner/.local/share/powershell/Modules/Microsoft.PowerShell.PSResourceGet'
VERBOSE: Attempting to search for packages in 'github/jtomkiew-mng'
WARNING: Installing dependencies is not currently supported for V3 server protocol repositories. The package will be installed without installing dependencies.
VERBOSE: This resource is not a PowerShell package and will be installed to the modules path: /home/runner/.local/share/powershell/Modules.
WARNING: Installing dependencies is not currently supported for V3 server protocol repositories. The package will be installed without installing dependencies.
VERBOSE: Installation source path is: '/tmp/08f9852c-dbf5-46e7-bf5f-c1fe153822ba/pascalcasemodule/1.0.0'
VERBOSE: Installation destination path is: '/home/runner/.local/share/powershell/Modules/pascalcasemodule/1.0.0'
VERBOSE: Attempting to move '/tmp/08f9852c-dbf5-46e7-bf5f-c1fe153822ba/pascalcasemodule/1.0.0' to '/home/runner/.local/share/powershell/Modules/pascalcasemodule/1.0.0'
VERBOSE: Successfully installed package 'pascalcasemodule' to location '/home/runner/.local/share/powershell/Modules'
VERBOSE: Attempting to delete '/tmp/08f9852c-dbf5-46e7-bf5f-c1fe153822ba'
VERBOSE: Successfully deleted '/tmp/08f9852c-dbf5-46e7-bf5f-c1fe153822ba'

--- lowercasemodule import starts here:
VERBOSE: Loading module from path '/home/runner/.local/share/powershell/Modules/lowercasemodule/1.0.0/lowercasemodule.psd1'.
VERBOSE: Populating RepositorySourceLocation property for module lowercasemodule.
VERBOSE: Loading module from path '/home/runner/.local/share/powershell/Modules/lowercasemodule/1.0.0/lowercasemodule.psm1'.
VERBOSE: Exporting function 'Show-Bread'.
VERBOSE: Importing function 'Show-Bread'.

--- PascalCaseModule import starts here:
VERBOSE: Skipping the Version folder 1.0.0 under Module /home/runner/.local/share/powershell/Modules/pascalcasemodule as it does not have a valid module manifest file.
Import-Module: /home/runner/work/_temp/0491fe94-aa68-41da-a922-6f403c0b1a7e.ps1:30
Line |
  30 |  Import-Module 'PascalCaseModule' -Force -Verbose
     |  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | The specified module 'PascalCaseModule' was not loaded because no valid
     | module file was found in any module directory.

Environment data

See workflow:
https://github.com/jtomkiew-mng/pwsh-example-module/actions/runs/6161850021/workflow

See NuGet packages:
https://github.com/jtomkiew-mng/pwsh-example-module/tree/main/.nuget

See package sources:
https://github.com/jtomkiew-mng/pwsh-example-module/tree/main/lowercasemodule
https://github.com/jtomkiew-mng/pwsh-example-module/tree/main/PascalCaseModule

Visuals

No response

jtomkiew-mng avatar Sep 12 '23 16:09 jtomkiew-mng

@jtomkiew-mng thanks for sharing this! What distro of Linux are you using? What are the LANG and LC_ALL values?

anamnavi avatar Sep 12 '23 17:09 anamnavi

This is the output of lsb_release and env vars LANG, LC_ALL from bash:

Distributor ID:	Ubuntu
Description:	Ubuntu 22.04.3 LTS
Release:	22.04
Codename:	jammy

LANG: C.UTF-8
LC_ALL: 

I've been running this on GitHub ubuntu-latest runners so far.

jtomkiew-mng avatar Sep 13 '23 10:09 jtomkiew-mng

In the logs when installing PascalCaseModule I've noticed this:

VERBOSE: This resource is not a PowerShell package and will be installed to the modules path: /home/runner/.local/share/powershell/Modules.

And the installed module PascalCaseModule contents contain a .nuspec file, while lowercasemodule does not (those 2 modules should be identical other than the name and GUID).

If it helps I'm attaching installed-modules.zip - zipped both modules as they were installed on that host (contents of /home/runner/.local/share/powershell/Modules/ minus PSResourceGet module).

jtomkiew-mng avatar Sep 13 '23 11:09 jtomkiew-mng

When the locale setting is C.UTF-8, it is meant to be case sensitive at the OS level. So, comparing a P and p will show them as a different character even with case insensitive comparison. I recommend using a locale without a C like en-US.UTF-8 or using the exact case as for the module names.

adityapatwardhan avatar Sep 25 '23 18:09 adityapatwardhan

I see no difference, what I did now:

  1. created a fresh Ubuntu 22.04.3 LTS VM,
  2. changed default locale to en-US.UTF-8 as @adityapatwardhan suggested,
  3. rebooted,
  4. installed PowerShell Core,
  5. installed GitHub runner,
  6. ran the same workflow as before, same result:
Distributor ID:	Ubuntu
Description:	Ubuntu 22.04.3 LTS
Release:	22.04
Codename:	jammy

LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

Using all lower case during install or import makes no difference in this case. This is the latest workflow I've ran: https://github.com/jtomkiew-mng/pwsh-example-module/blob/6e88f68fbc37f5c1d6f603d62bec26ababde92be/.github/workflows/ci.yml

jtomkiew-mng avatar Sep 26 '23 10:09 jtomkiew-mng

Re-opening to investigate, thanks for testing and letting us know that it repros @jtomkiew-mng

SydneyhSmith avatar Sep 26 '23 18:09 SydneyhSmith

(Should this issue be set back to Open?)

rickandersen-forte avatar Oct 16 '23 23:10 rickandersen-forte

Boop, there's your feedback bot. This issue stands as visible by the related issue #1446. Feel free to merge it if need be (in any direction).

Currently I'm using a crude workaround on version 1.0.0 of PSResourceGet, that boils down to renaming the installed module directory to match the original case before importing.

jtomkiew-mng avatar Oct 23 '23 15:10 jtomkiew-mng