-
Notifications
You must be signed in to change notification settings - Fork 40
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
PKG_CONFIG_PATH not exported from windows to msys2 #171
Comments
Please provide your GHA yml file or minimal sample to reproduce your issue. |
It's probably due to the craziness that I try to make msys behave like bash in my scripts. Getting a single script to work for both unix and windows is a pain. It would be nice is GITHUB_ENV and PKG_CONFIG_PATH just plain worked instead of all the workarounds needed for github ci. |
With |
I'll try it again. I had a very convoluted solution to my problem many months ago that stopped working 2-3 weeks ago. I'll go back to the simply solution and see if it is working for me. |
That might be because the default installation path changed (#163). If you were relying on absolute and hardcoded paths, you might need to fix those. |
You could check msys2 specific environment variables in the shell script. Like |
Yeah, I had a really bad solution. I'm going to try to make it work cleanly. Maybe all that I ever needed was path-inherit? I thought that I had done the first time that I tried and I didn't succeed. But maybe I didn't try it enough or maybe path-inherit works better now? Either way, I'll give it a go! |
There were some changes in the virtual environments provided by GitHub. Previously MSYS2's PATH was added by default, and several packages were preinstalled. Therefore, inheriting that in the clean installation might produce conflicts. Now, in |
@eine I've tried using In my CI, I have a place where I'm printing out the entire environment. Here's what it looks like: You can see where I'm adding the variables for PKG_CONFIG_PATH, LD_LIBRARY_PATH, and PATH. Here's where I'm printing the env by running the You can see that the CI is honoring my environment changes. But that's in the environment to windows, not to Unix! It's up to msys to "inherit" that. Here's the output of I can see my $HOME/.local in there, so that's good! What about PKG_CONFIG_PATH? Nope. Unlike For now, I have no solution. I could add What can I do to fix this? |
They don't. :-( Do you have a CI output that I can look at which proves otherwise? |
You can see here where PATH gets special handling: https://github.com/msys2/MSYS2-packages/blob/915946a637e1f2b7e26e32782f3af322009293db/filesystem/profile#L28-L45 PKG_CONFIG_PATH does not: https://github.com/msys2/MSYS2-packages/blob/915946a637e1f2b7e26e32782f3af322009293db/filesystem/profile#L53 |
@eine Okay, I found a solution to my problem. I'll describe it here and the different things that I tried. Hopefully it will save someone time in the future. If you don't have time to read it, here's the trick: Use ProblemAttempt 1: $GITHUB_ENVWe want to use a single GitHub CI for all builds, macos, Windows, and Ubuntu. This makes our CI smaller and more manageable. macos and unix are pretty easy because they are mostly compatible but Windows is a little trickier, especially about the environment variables! The issue is that if you put something like this in your CI:
It will set the variable in the environments for macos and for ubuntu, but it won't work the same for Windows. That's because it is setting the environment variable in the windows environment, which is, like the powershell. But you want the environment variable set inside of msys2. Attempt 2: path-type: inheritThe solution should be to use Attempt 3: source a different fileOne solution would be to instead write to a different file, maybe called
That's annoying! We don't want to have to do that. Attempt 4: source it in the shellGitHub will let you change the shell command for your platform. So you might try something like this:
Now it should source your file before running the shell each time. I tried that but it didn't work. GitHub was complaining that Attempt 5: Put it in .bashrcWe know that bash will always run
So we need to make bash interactive. So we need to modify the shell to be interactive.
This causes other problems, though, because if the shell is interactive then some of the stuff that you do in your CI will behave differently and your tests will fail in a weird way. So this is no good. Attempt 6: Put it in .bash_login.
SolutionSo in the end, here's what the CI script could looks like: jobs:
my_job:
name: ${{ matrix.os }}_job
strategy:
matrix:
os: [ubuntu, macos, windows]
include:
- os: windows
shell: msys2 {0}
- os: ubuntu
shell: '/usr/bin/bash -l -e -o pipefail {0}'
- os: macos
shell: '/bin/bash -l -e -o pipefail {0}'
runs-on: ${{ matrix.os }}-latest
defaults:
run:
shell: ${{ matrix.shell }}
steps:
- name: Setup paths and env
run: |
rm -f ~/.bash_profile
echo "export FOO=bar" >> ~/.bash_profile What this does is:
- os: windows
- os: ubuntu
- os: macos
- os: windows
shell: msys2 {0}
- os: ubuntu
shell: '/usr/bin/bash -l -e -o pipefail {0}'
- os: macos
shell: '/bin/bash -l -e -o pipefail {0}'
That's it! Now a single CI will work for windows and ubuntu and macos. The pcb2gcode project is using this successfully with a fairly complicated build for all three platforms and they all use the same steps, more or less. |
This is a new error that I'm getting in GitHub CI. It started about 2 weeks ago. Seems like cygpath might be provided by git for windows, which I have never explicitly installed... Maybe GitHub changed something about their environment and cygpath is no longer in there?
The text was updated successfully, but these errors were encountered: