Compare commits

..

36 Commits

Author SHA1 Message Date
Christoph Reiter
2480a1e1ae shortcuts: start launcher and rename
Instead of calling msys2_shell.cmd call the respective launchers.
This unifies the way MSYS2 is started for most users and allows them
to set launch variables in the launcher .ini files.

While at it also rename the shortcuts to reference the environment names
instead of describing the environment. Not everyone might care or know
what these mean, so just unify them with the MSYSTEM env var which is
shown when starting bash right after.

Fixes #24
2022-08-15 22:09:51 +02:00
Christoph Reiter
bb31bc4758 Run package checksum tests as well
But don't fail, since most packages are missing the checksums still.
Once we have rebuilt everything in base we can treat errors there as fatal.

This shows us what is missing still..
2022-05-03 09:50:47 +02:00
Christoph Reiter
a63c2efbb1 release todo list: update setup-msys2 first, to make sure all tests pass 2022-03-19 09:25:25 +01:00
Christoph Reiter
0f0ce8ac4a CI: prefix the matrix job name with the parent job name
so it's easier to understand what type of test it runs
2022-01-28 12:03:05 +01:00
Christoph Reiter
92cd8703f0 Fix install scripts failing when installing into the chroot
While everything can asume base is there, packages in base also
implicitely depend on the runtime (and maybe filesystem?), so install
them first.

Until now we were just lucky that pacman installed them in the right order.

Fixes #40
2022-01-28 12:03:05 +01:00
Christoph Reiter
d7119e21be CI: test syncing without a login shell and installing a package 2022-01-28 12:03:05 +01:00
Christoph Reiter
3afa802e7b Move to the 2022 image, like everywhere else 2022-01-28 12:03:05 +01:00
Christoph Reiter
109259037b Use a higher compression level for xz 2022-01-01 14:23:47 +01:00
Christoph Reiter
ff11ad435d CI: run daily 2021-12-20 08:56:37 +01:00
Christoph Reiter
5ff691e212 CI: stop testing with windows-2016
The image is going away beginning of next year.
2021-12-12 14:46:57 +01:00
Christoph Reiter
a2903688fa Update .gitignore
Co-authored-by: Naveen M K <naveen521kk@gmail.com>
2021-11-29 17:31:21 +01:00
Christoph Reiter
c898282f3f Switch the sfx installer to zstandard
Using a 7zip fork with zstandard support: https://github.com/mcmilk/7-Zip-zstd

Saves 20% CPU when extracting, also uses ~50MB less peak memory.
Downside is a 5% larger installer.
2021-11-29 17:31:21 +01:00
Christoph Reiter
289a0c9938 Fix switching to the main mirror
The config files have changed in the mean time.
2021-11-23 09:57:15 +01:00
Christoph Reiter
097ca2e025 CI: only upload the "latest" variants 2021-11-23 09:53:01 +01:00
Mehdi Chinoune
14c8d38bc1 Use github-cli to upload installers 2021-11-23 08:56:39 +01:00
Christoph Reiter
17b1d7ee2d Revert "try py3.9 for eine/tip"
This reverts commit febbec6b28.

GH doesn't allow commits not on a branch
2021-11-20 11:56:42 +01:00
Christoph Reiter
febbec6b28 try py3.9 for eine/tip 2021-11-20 11:33:49 +01:00
Christoph Reiter
8216e9655b CI: disable concurrency 2021-11-20 09:15:02 +01:00
Mehdi Chinoune
f898970dc7 Add clang64 shortcut
Co-Authored-By: jeremyd2019 <github@jdrake.com>
2021-11-20 08:54:40 +01:00
Mehdi Chinoune
0fd65b0ee4 Remove duplicated code 2021-10-20 22:25:18 +02:00
Christoph Reiter
2779e83ac4 CI: require 2022 for upload 2021-08-24 09:03:58 +02:00
Christoph Reiter
f9dca48d21 CI: test installer with 2022 2021-08-24 08:35:22 +02:00
Christoph Reiter
26c21ec33f README: add instructions for how to create a new release 2021-06-25 16:11:16 +02:00
Christoph Reiter
dbb542e04b Add a license file 2021-06-07 06:10:39 +02:00
Christoph Reiter
1491e3b29c Update README.md 2021-06-04 10:28:46 +02:00
Christoph Reiter
6a200a8209 README: add some CLI examples 2021-06-04 10:23:00 +02:00
Christoph Reiter
13d7be8a0e Run some tests on the produced installers before uploading
Install on both server 2016 and 2019, using the qt installer and the sfx inside docker

This makes the nightly builds safer to use, since they are likely never completely broken.

Fixes #27
2021-06-03 22:30:16 +02:00
Christoph Reiter
9526399f7c CI: Add a docker image and test 2021-05-20 07:47:54 +02:00
FeRD (Frank Dana)
c0f11534c2 control.js: Use const variables 2021-05-03 22:40:23 +02:00
Christoph Reiter
9fedc87b6a MaintenanceToolName: uninstall 2021-05-03 18:12:03 +02:00
Frank Dana
7cd10e81b9 Update qt-ifw/config/config.xml 2021-05-03 18:11:19 +02:00
FeRD (Frank Dana)
b2ede322c2 Remove all modify functionality, rename binary
- Maintenance tool is now installed as 'Uninstall_MSYS2.exe'
- 'Modify' button is disabled in Windows Settings 'Apps' list
- Add/Remove and Modify choices are hidden on Introduction page,
  leaving 'Remove all components' as only available choice
- Even though it's no longer accessible, the Repository
  configuration tab of the Settings dialog is also removed
2021-05-03 18:11:19 +02:00
Christoph Reiter
02864876e3 CI: add write permissions for the upload job 2021-04-24 10:01:40 +02:00
Christoph Reiter
59f5965b5c README: Update the installer screenshot 2021-03-31 19:52:12 +02:00
Christoph Reiter
013ed1d783 Update the install icon 2021-03-31 19:50:20 +02:00
Christoph Reiter
059986c768 Add ucrt64 shortcut 2021-03-31 19:49:12 +02:00
15 changed files with 271 additions and 36 deletions

13
.ci/Dockerfile.2019 Normal file
View File

@@ -0,0 +1,13 @@
FROM mcr.microsoft.com/windows/servercore:ltsc2019
COPY ./msys2-base-x86_64-latest.sfx.exe /msys2.exe
RUN powershell -Command \
$ErrorActionPreference = 'Stop'; \
$ProgressPreference = 'SilentlyContinue'; \
/msys2.exe -y -oC:\; \
function msys() { C:\msys64\usr\bin\bash.exe @('-lc') + @Args; } \
msys ' '; \
msys 'pacman --noconfirm -Syuu'; \
msys 'pacman --noconfirm -Syuu'; \
msys 'pacman --noconfirm -Scc';

13
.ci/Dockerfile.2022 Normal file
View File

@@ -0,0 +1,13 @@
FROM mcr.microsoft.com/windows/servercore:ltsc2022
COPY ./msys2-base-x86_64-latest.sfx.exe /msys2.exe
RUN powershell -Command \
$ErrorActionPreference = 'Stop'; \
$ProgressPreference = 'SilentlyContinue'; \
/msys2.exe -y -oC:\; \
function msys() { C:\msys64\usr\bin\bash.exe @('-lc') + @Args; } \
msys ' '; \
msys 'pacman --noconfirm -Syuu'; \
msys 'pacman --noconfirm -Syuu'; \
msys 'pacman --noconfirm -Scc';

View File

@@ -5,11 +5,13 @@ on:
pull_request:
workflow_dispatch:
schedule:
- cron: '0 3 * * 1,4'
- cron: '0 3 * * *'
concurrency: nope
jobs:
build-installer:
runs-on: windows-latest
runs-on: windows-2022
steps:
- name: Checkout code
uses: actions/checkout@v2
@@ -24,9 +26,8 @@ jobs:
- name: Switch to the main mirror
shell: msys2 {0}
run: |
sed -e "s|Include = /etc/pacman.d/mirrorlist.mingw32|Server = http://repo.msys2.org/mingw/i686/|g" -i /etc/pacman.conf
sed -e "s|Include = /etc/pacman.d/mirrorlist.mingw64|Server = http://repo.msys2.org/mingw/x86_64/|g" -i /etc/pacman.conf
sed -e "s|Include = /etc/pacman.d/mirrorlist.msys|Server = http://repo.msys2.org/msys/\$arch/|g" -i /etc/pacman.conf
echo 'Server = https://repo.msys2.org/mingw/$repo/' > /etc/pacman.d/mirrorlist.mingw
echo 'Server = https://repo.msys2.org/msys/$arch/' > /etc/pacman.d/mirrorlist.msys
pacman-conf.exe
- name: Update using the main mirror & Check install
@@ -39,6 +40,12 @@ jobs:
shell: msys2 {0}
run: |
bash make-msys2-installer
- name: Create 'latest' Variants and Checksums
run: |
mv msys2-base-x86_64-[0-9]*.sfx.exe msys2-base-x86_64-latest.sfx.exe
mv msys2-x86_64-[0-9]*.exe msys2-x86_64-latest.exe
mv msys2-*.tar.xz msys2-base-x86_64-latest.tar.xz
sha256sum.exe msys2-*
sha256sum.exe msys2-* > msys2-checksums.txt
@@ -48,8 +55,118 @@ jobs:
name: installer
path: msys2-*
upload-nightly:
test-installer:
name: installer-${{ matrix.image }}
runs-on: windows-${{ matrix.image }}
needs: build-installer
strategy:
fail-fast: false
matrix:
image: [2019, 2022]
steps:
- name: Checkout code
uses: actions/checkout@v2
- uses: actions/download-artifact@v2
with:
name: installer
- name: Install
run: |
./msys2-x86_64-latest.exe in --confirm-command --accept-messages --root C:/msys2-install-test
- name: Test without Login Shell
run: |
C:\msys2-install-test\usr\bin\pacman.exe -Syy
C:\msys2-install-test\usr\bin\pacman.exe --noconfirm -S vim
- name: Test
run: |
C:\msys2-install-test\usr\bin\bash.exe -lc "pacman --version"
C:\msys2-install-test\usr\bin\bash.exe -lc "pacman -Qkv"
C:\msys2-install-test\usr\bin\bash.exe -lc "pacman -Syy"
C:\msys2-install-test\usr\bin\bash.exe -lc "pacman --noconfirm -S git"
- name: Uninstall
run: |
C:\msys2-install-test\uninstall.exe pr --confirm-command
test-docker-sfx:
name: docker-sfx-${{ matrix.image }}
runs-on: windows-${{ matrix.image }}
needs: build-installer
strategy:
fail-fast: false
matrix:
image: [2019, 2022]
steps:
- name: Checkout code
uses: actions/checkout@v2
- uses: actions/download-artifact@v2
with:
name: installer
- name: Build image
run: |
docker build -t msys2-base -f ./.ci/Dockerfile.${{ matrix.image }} .
- name: Test without Login Shell
run: |
docker run msys2-base C:\msys64\usr\bin\pacman.exe -Syy
docker run msys2-base C:\msys64\usr\bin\pacman.exe --noconfirm -S vim
- name: Test
run: |
docker run msys2-base C:\msys64\usr\bin\bash.exe -lc "pacman --version"
docker run msys2-base C:\msys64\usr\bin\bash.exe -lc "pacman -Qkv"
docker run msys2-base C:\msys64\usr\bin\bash.exe -lc "pacman -Qkk || true"
docker run msys2-base C:\msys64\usr\bin\bash.exe -lc "pacman -Syy"
docker run msys2-base C:\msys64\usr\bin\bash.exe -lc "pacman -S --noconfirm git"
test-sfx:
name: sfx-${{ matrix.image }}
runs-on: windows-${{ matrix.image }}
needs: build-installer
strategy:
fail-fast: false
matrix:
image: [2019, 2022]
steps:
- name: Checkout code
uses: actions/checkout@v2
- uses: actions/download-artifact@v2
with:
name: installer
- name: Install
run: |
./msys2-base-x86_64-latest.sfx.exe -y -oC:/msys2-install-test
- name: Test without Login Shell
run: |
$env:Path = 'C:\msys2-install-test\msys64\usr\bin;' + $env:Path
C:\msys2-install-test\msys64\usr\bin\bash.exe -c "pacman-key --init"
C:\msys2-install-test\msys64\usr\bin\bash.exe -c "pacman-key --populate"
C:\msys2-install-test\msys64\usr\bin\bash.exe -c "pacman -Syy"
C:\msys2-install-test\msys64\usr\bin\bash.exe -c "pacman --noconfirm -S vim"
- name: Test
run: |
C:\msys2-install-test\msys64\usr\bin\bash.exe -lc "pacman --version"
C:\msys2-install-test\msys64\usr\bin\bash.exe -lc "pacman -Qkv"
C:\msys2-install-test\msys64\usr\bin\bash.exe -lc "pacman -Qkk || true"
C:\msys2-install-test\msys64\usr\bin\bash.exe -lc "pacman -Syy"
C:\msys2-install-test\msys64\usr\bin\bash.exe -lc "pacman -S --noconfirm git"
upload-nightly:
permissions:
contents: write
needs:
- test-docker-sfx
- test-installer
- test-sfx
if: github.ref == 'refs/heads/master'
runs-on: ubuntu-latest
steps:
@@ -57,15 +174,8 @@ jobs:
with:
name: installer
- name: Create 'latest' Variants
- name: Upload Installers
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
cp msys2-base-x86_64-[0-9]*.sfx.exe msys2-base-x86_64-latest.sfx.exe
cp msys2-x86_64-[0-9]*.exe msys2-x86_64-latest.exe
cp msys2-*.tar.xz msys2-base-x86_64-latest.tar.xz
- uses: eine/tip@master
with:
token: ${{ secrets.GITHUB_TOKEN }}
tag: nightly-x86_64
rm: true
files: msys2-*
gh release upload nightly-x86_64 msys2-* --clobber -R ${{ github.repository }}

3
.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
_cache
*.exe
*.xz

BIN
7zCon.sfx

Binary file not shown.

26
LICENSE Normal file
View File

@@ -0,0 +1,26 @@
Copyright 2021 MSYS2 devs
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.

View File

@@ -2,13 +2,43 @@
## Nightly build
Download: [msys2-x86_64-latest.exe](https://github.com/msys2/msys2-installer/releases/download/nightly-x86_64/msys2-x86_64-latest.exe)
https://github.com/msys2/msys2-installer/releases/tag/nightly-x86_64
![screenshot](screenshot.png)
## CLI Usage examples
Installing the GUI installer via the CLI to `C:\msys64`:
```powershell
.\msys2-x86_64-latest.exe in --confirm-command --accept-messages --root C:/msys64
```
Uninstalling an existing installation in `C:\msys64` via the CLI:
```powershell
C:\msys64\uninstall.exe pr --confirm-command
```
Installing the self extracting archive to `C:\msys64`:
```powershell
.\msys2-base-x86_64-latest.sfx.exe -y -oC:\
```
## Build Instructions
```bash
# Run in a MSYS2 environment
./make-msys2-installer
```
```
## New Release TODO List
* Trigger a new nightly build via https://github.com/msys2/msys2-installer/actions/workflows/build.yml or use an existing one
* Get all files with dates in their names, sign them and create checksum files (.sig and .sha256)
* Create a new git tag following format: `date -I`
* Upload the installer files to the release tag
* Update the download link and checksum for the GiHub action and verify that all tests pass: https://github.com/msys2/setup-msys2/blob/master/main.js
* Run `msys2-devtools/update-installer "$(date -I)"` on the server to copy the release from GitHub
* Update the link, name and checksum on the main website (pointing to GitHub): https://github.com/msys2/msys2.github.io/blob/source/web/index.md

28
create-sfx.sh Normal file
View File

@@ -0,0 +1,28 @@
#!/bin/bash
# usage: ./create-sfx.sh /some/path/to/msys64 installer.exe
set -e
# Download and extract https://github.com/mcmilk/7-Zip-zstd
NAME="7z21.03-zstd-x64"
CHECKSUM="531b20dfb03d8f30f61ae56a181610bbb6f3cf7cc71dac1d8f95511289de76f3"
DIR="$( cd "$( dirname "$0" )" && pwd )"
mkdir -p "$DIR/_cache"
BASE="$DIR/_cache/$NAME"
if [ ! -f "$BASE.exe" ]; then
curl --fail -L "https://github.com/mcmilk/7-Zip-zstd/releases/download/v21.03-v1.5.0-R2/$NAME.exe" -o "$BASE.exe"
fi
echo "$CHECKSUM $BASE.exe" | sha256sum --quiet --check
if [ ! -d "$BASE" ]; then
7z e -o"$BASE" "$DIR/_cache/$NAME.exe"
fi
# Creat SFX installer
INPUT="$1"
OUTPUT="$2"
TEMP="$OUTPUT.payload"
rm -f "$TEMP"
"$BASE/7z" a "$TEMP" -ms1T -m0=zstd -mx22 "$INPUT"
cat "$BASE/7zCon.sfx" "$TEMP" > "$OUTPUT"
rm "$TEMP"

View File

@@ -1,10 +0,0 @@
#!/bin/bash
set -e
# Fetch 7zCon.sfx from upstream 7-zip
curl "https://www.7-zip.org/a/7z1900.exe" -o 7z1900.exe
echo "759aa04d5b03ebeee13ba01df554e8c962ca339c74f56627c8bed6984bb7ef80 7z1900.exe" | sha256sum --check
7z x -o7zout 7z1900.exe
cp 7zout/7zCon.sfx .
rm -Rf 7zout 7z1900.exe

View File

@@ -74,6 +74,7 @@ create_archives() {
popd > /dev/null
pushd ${_newmsysbase} > /dev/null
export XZ_OPT="-e9T0"
local _compress_cmd2="/usr/bin/tar --transform='s/:/_/g' --dereference --hard-dereference -cJf ${_thisdir}/${_filename2} msys${_bitness}"
echo "Run: ${_compress_cmd2} ..." | tee -a ${_log}
eval "${_compress_cmd2}" 2>&1 | tee -a ${_log}
@@ -85,9 +86,7 @@ create_archives() {
fi
# self extracting cli 7z archive
7z a -mx=9 "${_thisdir}/_temp.7z" "msys${_bitness}"
cat ${_thisdir}/7zCon.sfx "${_thisdir}/_temp.7z" > "${_thisdir}/${_filename3}"
rm "${_thisdir}/_temp.7z"
"${_thisdir}/create-sfx.sh" "msys${_bitness}" "${_thisdir}/${_filename3}"
popd > /dev/null
}
@@ -114,6 +113,7 @@ create_chroot_system() {
mkdir -p tmp
eval "pacman -Syu --root \"${_newmsys}\"" | tee -a ${_log}
eval "pacman -S filesystem msys2-runtime --noconfirm --root \"${_newmsys}\"" | tee -a ${_log}
eval "pacman -S base --noconfirm --root \"${_newmsys}\"" | tee -a ${_log}
_result=$?
if [ "${_result}" -ne "0" ]; then

BIN
msys2.ico

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View File

@@ -4,9 +4,15 @@
<Version>@VERSION@</Version>
<Title>MSYS2 @BITNESS@bit</Title>
<Publisher>The MSYS2 Developers</Publisher>
<ControlScript>control.js</ControlScript>
<StartMenuDir>MSYS2 @BITNESS@bit</StartMenuDir>
<RunProgram>@TargetDir@/msys2_shell.cmd</RunProgram>
<RunProgramArguments></RunProgramArguments>
<InstallerApplicationIcon>../../msys2</InstallerApplicationIcon>
<InstallerWindowIcon>../../msys2</InstallerWindowIcon>
<InstallActionColumnVisible>false</InstallActionColumnVisible>
<MaintenanceToolName>uninstall</MaintenanceToolName>
<SupportsModify>false</SupportsModify>
<RepositorySettingsPageVisible>false</RepositorySettingsPageVisible>
<SaveDefaultRepositories>false</SaveDefaultRepositories>
</Installer>

15
qt-ifw/config/control.js Normal file
View File

@@ -0,0 +1,15 @@
function Controller()
{
}
Controller.prototype.IntroductionPageCallback = function()
{
const widget = gui.currentPageWidget();
const radioNames = ["PackageManagerRadioButton", "UpdaterRadioButton"];
for (const name of radioNames) {
const el = gui.findChild(widget, name);
if (el != null) {
el.hide();
}
}
}

View File

@@ -17,10 +17,11 @@ function createShortcuts()
return;
}
var cmdLocation = installer.value("TargetDir") + "\\msys2_shell.cmd";
component.addOperation("CreateShortcut", cmdLocation, "@StartMenuDir@/MSYS2 MinGW 32-bit.lnk", "-mingw32", "iconPath=@TargetDir@/mingw32.exe");
component.addOperation("CreateShortcut", cmdLocation, "@StartMenuDir@/MSYS2 MinGW 64-bit.lnk", "-mingw64", "iconPath=@TargetDir@/mingw64.exe");
component.addOperation("CreateShortcut", cmdLocation, "@StartMenuDir@/MSYS2 MSYS.lnk", "-msys", "iconPath=@TargetDir@/msys2.exe");
component.addOperation("CreateShortcut", "@TargetDir@/mingw32.exe", "@StartMenuDir@/MSYS2 MINGW32.lnk", "iconPath=@TargetDir@/mingw32.exe");
component.addOperation("CreateShortcut", "@TargetDir@/mingw64.exe", "@StartMenuDir@/MSYS2 MINGW64.lnk", "iconPath=@TargetDir@/mingw64.exe");
component.addOperation("CreateShortcut", "@TargetDir@/ucrt64.exe", "@StartMenuDir@/MSYS2 UCRT64.lnk", "iconPath=@TargetDir@/ucrt64.exe");
component.addOperation("CreateShortcut", "@TargetDir@/clang64.exe", "@StartMenuDir@/MSYS2 CLANG64.lnk", "iconPath=@TargetDir@/clang64.exe");
component.addOperation("CreateShortcut", "@TargetDir@/msys2.exe", "@StartMenuDir@/MSYS2 MSYS.lnk", "iconPath=@TargetDir@/msys2.exe");
if ("@BITNESS@bit" === "32bit") {
component.addOperation( "Execute",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 8.2 KiB