actions / runner-images

GitHub Actions runner images
MIT License
10.18k stars 3.06k forks source link

Update/Add Visual Studio 2022 Extension: Multilingual App Toolkit #7389

Closed gbakeman closed 1 year ago

gbakeman commented 1 year ago

Tool name

Multilingual App Toolkit v4.1 (VS 2022+)

Tool license

Microsoft Software License

Add or update?

Desired version

4.1

Approximate size

3110 KB when downloaded

Brief description of tool

The Multilingual App Toolkit is an official software suite from Microsoft to aid in globalizing applications that are developed in their toolset. I personally am using it to support some legacy software, and wouldn't have made this request except that I am having the hardest time installing this extension as part of a workflow. The install will hang and never complete when being run from a command line (likely permissions issue?) so I hope adding this will be considered.

URL for tool's homepage

https://marketplace.visualstudio.com/items?itemName=dts-publisher.mat2022

Provide a basic test case to validate the tool's functionality.

Try one of the samples from the official repository, and the compile output should not contain messages stating that the tool is missing.

Platforms where you need the tool

Runner images where you need the tool

Can this tool be installed during the build?

Theoretically, yes. https://github.com/microcompiler/install-vsix provides an action that aides in downloading a Visual Studio Gallery extension and installing it. For example, in my workflow:

    # Install the MAT extension for multilingual compilation if requested.
    - name: Install Multilingual App Toolkit extension
      if: ${{ inputs.compileLangs }}
      uses: microcompiler/install-vsix@main
      with:
        packagename: 'dts-publisher.mat2022'

However, in this particular case, the install hangs and I have not had any luck in troubleshooting why exactly. If I run the script on my own machine, a UAC prompt appears so I suspect that the VSIXInstaller program is attempting to request administrator permissions from a user that is not present (which is odd, since UAC is supposed to be disabled.)

Tool installation time in runtime

N/A

Are you willing to submit a PR?

Potentially, not sure what needs to be done on my end.

erik-bershel commented 1 year ago

Hello @gbakeman! We will return with an answer after a brief investigation.

erik-bershel commented 1 year ago

Hello @gbakeman! Due to the list of reasons (rarely used tool, maintenance concerns, available to install in runtime) we decided to avoid installing that particular tool in our images. But it should take only couple minutes to install it in runtime using something like that:

jobs:
  installVSiX:
    runs-on: windows-latest
    steps:
    - name: Download vsix
      run: curl -o mat.vsix https://marketplace.visualstudio.com/_apis/public/gallery/publishers/dts-publisher/vsextensions/mat2022/4.2.1/vspackage
    - name: Install vsix
      run: |
        $FilePath = Join-Path $env:GITHUB_WORKSPACE "mat.vsix"
        $ArgumentList = ('/quiet', $FilePath)
        $VSpath = "Microsoft Visual Studio\2022\Enterprise\Common7\IDE\VSIXInstaller.exe"
        $process = Start-Process -FilePath $VSpath -WorkingDirectory $env:ProgramFiles -ArgumentList $ArgumentList -Wait -PassThru
gbakeman commented 1 year ago

Hi @erik-bershel ,

I totally understand, thought I'd ask just in case but it does seem to be a rare tool. I've been working on this problem for weeks now, I assumed there was a permissions issue, but it turns out it just takes a very long time to install on the runner system for some reason. Not a problem though, I can make language compilation an infrequent process.

Thank you for looking into this!

erik-bershel commented 1 year ago

@gbakeman I'm curious about why it takes so much in your case. With the example I dropped earlier it took less than three minutes (about two for almost all runs) for me to install that toolkit.

gbakeman commented 1 year ago

I appreciate your curiosity - if you want to take a look, here's the most recent run where everything successfully compiled. You'll see that the installation step took about 20 minutes there.

Comparing the script you used to the one I'm using, the only notable difference I see is that you omitted the /admin switch. I don't know if you're familiar with it, but I'm finding out that the VSIXInstaller tool isn't very command line friendly so I think there's an error in a log somewhere that it isn't reporting back to you. I've found that the MAT extension requires the admin switch and will just fail completely without it. I've used the below snippet to capture logs if you want to try (VSIXInstaller generates dd_installer_* logs, IIRC):

    - name: Capture logs when cancelled
      if: ${{ cancelled() }}
      uses: actions/upload-artifact@v3
      with:
        name: temp-dir
        if-no-files-found: error
        path: ${{ env.TEMP }}

If you don't mind, I'm interested if you have any further thoughts on this. I'm debating internally if I need to find another method for compiling translations - this area is very new territory for me so I'm finding out new things on a daily basis!