build #3
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: build | |
on: | |
workflow_dispatch: | |
inputs: | |
branch: | |
description: 'The branch to build' | |
required: true | |
default: 'main' | |
tag_version: | |
description: 'The version of pxt-ev3 upstream, eg: use 1.4.36 instead of v1.4.36' | |
required: true | |
default: '1.4.36' | |
# https://docs.github.com/zh/actions/using-jobs/assigning-permissions-to-jobs | |
permissions: write-all | |
# permissions: | |
# pull-requests: write | |
# contents: write | |
# repository-projects: write | |
env: | |
APP_NAME: pxt-ev3-app | |
defaults: | |
run: | |
shell: bash | |
jobs: | |
build-depolyable-static-files: | |
name: Build depoly files for ${{ github.event.inputs.tag_version }} | |
runs-on: ubuntu-latest | |
steps: | |
- name: 'Checkout' | |
uses: actions/checkout@v2 | |
with: | |
submodules: true | |
- name: 'Checkout and push specified tag version of scratch' | |
run: | | |
git config --global pull.rebase false | |
git config --global user.name "github-actions[bot]" | |
git config --global user.email "github-actions[bot]@users.noreply.github.com" | |
cd pxt-ev3 | |
git status | |
git remote -v | |
git fetch --all --tags | |
git checkout tags/v${{ github.event.inputs.tag_version }} | |
git status | |
cd .. | |
git add pxt-ev3 | |
git commit -m "update pxt-ev3 to v${{ github.event.inputs.tag_version }}" | |
# update version in README.md using sed | |
sed -i "s/[0-9]\+\.[0-9]\+\.[0-9]\+/${{ github.event.inputs.tag_version }}/g" README.md | |
git add README.md | |
git commit -m "update README.md" | |
git tag ${{ github.event.inputs.tag_version }} | |
git push | |
git push --tag | |
- name: Use Node.js 18.x | |
uses: actions/setup-node@v2 | |
with: | |
node-version: 18.x | |
cache: 'npm' | |
- name: 'Initialization' | |
run: | | |
sudo apt-get install xvfb | |
sudo npm install -g pxt | |
npm install | |
working-directory: pxt-ev3 | |
# - name: 'Patching...' | |
# run: | | |
# # try to fix staticpkg failure when process homepage-content.md | |
# # TypeError: Cannot read properties of undefined (reading 'replace') | |
# # The fix is change the fallback returns of resolveMd to targetMd | |
# sed -i -z -E 's#(function resolveMd.*?)return undefined;#\1return targetMd;#g' node_modules/pxt-core/built/nodeutil.js | |
# working-directory: pxt-ev3 | |
- name: 'Building pxt-ev3' | |
run: | | |
node node_modules/pxt-core/built/pxt.js staticpkg | |
working-directory: pxt-ev3 | |
- name: Prepare build files achive | |
run: | | |
ls -lR ./pxt-ev3/built/ | |
7z a -tzip ${{env.APP_NAME}}-${{ github.event.inputs.tag_version }}.zip -r ./pxt-ev3/built/packaged/* | |
- uses: actions/upload-artifact@v2 | |
with: | |
name: pxt-ev3-dist | |
path: ${{env.APP_NAME}}-${{ github.event.inputs.tag_version }}.zip | |
- name: 'Publish build files achive to release' | |
uses: xresloader/upload-to-github-release@v1 | |
env: | |
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} | |
with: | |
tag_name: ${{ github.event.inputs.tag_version }} | |
file: ${{env.APP_NAME}}-${{ github.event.inputs.tag_version }}.zip | |
tags: true | |
draft: false | |
overwrite: true | |
build-native-executable: | |
name: 'Build native executable' | |
needs: [build-depolyable-static-files] | |
strategy: | |
fail-fast: false | |
matrix: | |
os: ['ubuntu-latest', 'macos-latest', 'windows-latest'] | |
include: | |
- os: 'ubuntu-latest' | |
label: 'linux' | |
executable_extension: '' | |
- os: 'macos-latest' | |
label: 'macos' | |
executable_extension: '' | |
- os: 'windows-latest' | |
label: 'windows' | |
executable_extension: '.exe' | |
runs-on: ${{matrix.os}} | |
steps: | |
- name: 'Checkout' | |
uses: actions/checkout@v2 | |
with: | |
submodules: true | |
- uses: actions/download-artifact@v2 | |
with: | |
name: pxt-ev3-dist | |
- name: Extract pxt-ev3-dist | |
run: | | |
rm -rf dist | |
unzip ${{env.APP_NAME}}-${{ github.event.inputs.tag_version }}.zip -d dist | |
- name: Display structure of downloaded files | |
run: ls -l . dist | |
- name: Use Node.js 18.x | |
uses: actions/setup-node@v2 | |
with: | |
node-version: 18.x | |
cache: 'yarn' | |
- name: check toolchain version | |
run: | | |
node --version | |
npm --version | |
yarn --version | |
rustc --version | |
cargo --version | |
- name: 'Setup for linux' | |
if: matrix.os == 'ubuntu-latest' | |
run: |- | |
sudo ls -lR /etc/apt/ | |
echo ------------- | |
# sudo sed 's/mirror+file:\/etc\/apt\/apt-mirrors.txt/[arch-=amd64,i386] http:\/\/ports.ubuntu.com\/ubuntu-ports\//g' /etc/apt/sources.list | sudo tee /etc/apt/sources.list.d/ports.list | |
# echo ------------- | |
# sudo sed -i 's/mirror+file:\/etc\/apt\/apt-mirrors.txt/[arch=amd64,i386] http:\/\/archive.ubuntu.com\/ubuntu\//g' /etc/apt/sources.list | |
cat > /tmp/sources.list << EOF | |
deb [arch=amd64,i386] http://archive.ubuntu.com/ubuntu jammy main multiverse universe restricted | |
deb [arch=amd64,i386] http://archive.ubuntu.com/ubuntu jammy-security main multiverse universe restricted | |
deb [arch=amd64,i386] http://archive.ubuntu.com/ubuntu jammy-updates main multiverse universe restricted | |
deb [arch=amd64,i386] http://archive.ubuntu.com/ubuntu jammy-backports main multiverse universe restricted | |
deb [arch-=amd64,i386] http://ports.ubuntu.com/ubuntu-ports jammy main multiverse universe restricted | |
deb [arch-=amd64,i386] http://ports.ubuntu.com/ubuntu-ports jammy-security main multiverse universe restricted | |
deb [arch-=amd64,i386] http://ports.ubuntu.com/ubuntu-ports jammy-updates main multiverse universe restricted | |
deb [arch-=amd64,i386] http://ports.ubuntu.com/ubuntu-ports jammy-backports main multiverse universe restricted | |
EOF | |
sudo mv /etc/apt/sources.list /etc/apt/sources.list.default | |
sudo mv /tmp/sources.list /etc/apt/sources.list | |
echo ------------- | |
echo /etc/apt/sources.list && cat /etc/apt/sources.list | |
echo ------------- | |
echo /etc/apt/apt-mirrors.txt && cat /etc/apt/apt-mirrors.txt | |
echo ------------- | |
echo /etc/apt/sources.list.d/ports.list && cat /etc/apt/sources.list.d/ports.list || true | |
echo ------------- | |
sudo dpkg --add-architecture i386 | |
sudo dpkg --add-architecture arm64 | |
sudo dpkg --add-architecture armhf | |
sudo apt update | |
sudo apt install -y \ | |
gcc-multilib \ | |
g++-multilib | |
echo ------------- | |
echo install dependences ... | |
sudo apt install -y \ | |
libwebkit2gtk-4.0-dev \ | |
libssl-dev \ | |
libgtk-3-dev \ | |
librsvg2-dev \ | |
libayatana-appindicator3-dev | |
echo ------------- | |
echo install 32-bit dependences ... | |
# libayatana-appindicator3-dev:i386 is missing, see https://packages.ubuntu.com/focal/libayatana-appindicator3-dev | |
sudo apt install -y \ | |
libwebkit2gtk-4.0-dev:i386 \ | |
libssl-dev:i386 \ | |
libgtk-3-dev:i386 \ | |
librsvg2-dev:i386 | |
echo ------------- | |
echo install arm64 dependences ... | |
sudo apt install -y \ | |
gcc-aarch64-linux-gnu \ | |
g++-aarch64-linux-gnu \ | |
libc6-dev-arm64-cross \ | |
patchelf:arm64 \ | |
libwebkit2gtk-4.0-dev:arm64 \ | |
libssl-dev:arm64 \ | |
libgtk-3-dev:arm64 \ | |
librsvg2-dev:arm64 \ | |
libayatana-appindicator3-dev:arm64 | |
echo ------------- | |
echo install armhf dependences ... | |
sudo apt install -y \ | |
gcc-arm-linux-gnueabihf \ | |
g++-arm-linux-gnueabihf \ | |
libc6-dev-armhf-cross \ | |
patchelf:armhf \ | |
libwebkit2gtk-4.0-dev:armhf \ | |
libssl-dev:armhf \ | |
libgtk-3-dev:armhf \ | |
librsvg2-dev:armhf \ | |
libayatana-appindicator3-dev:armhf | |
echo 'ok' | |
- name: 'Setup for macos' | |
if: matrix.os == 'macos-latest' | |
run: | | |
echo 'ok' | |
- name: 'Setup for windows' | |
if: matrix.os == 'windows-latest' | |
run: | | |
# choco install visualstudio2019-workload-vctools | |
# https://github.com/actions/virtual-environments/blob/main/images/win/Windows2019-Readme.md#visual-studio-enterprise-2019 | |
echo 'ok' | |
- name: Build Native binarys on ubuntu | |
if: matrix.os == 'ubuntu-latest' | |
run: | | |
echo "build native binarys..." | |
rustup target add x86_64-unknown-linux-gnu | |
rustup target add i686-unknown-linux-gnu | |
rustup target add aarch64-unknown-linux-gnu | |
rustup target add armv7-unknown-linux-gnueabihf | |
yarn | |
yarn tauri info | |
yarn tauri build -t x86_64-unknown-linux-gnu -v -c "{\"package\":{\"version\":\"${{ github.event.inputs.tag_version }}\"}}" | |
export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig/:$PKG_CONFIG_PATH | |
export PKG_CONFIG_SYSROOT_DIR=/ | |
yarn tauri build -t i686-unknown-linux-gnu -v -c "{\"package\":{\"version\":\"${{ github.event.inputs.tag_version }}\"}}" | |
# export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc | |
# export CC_aarch64_unknown_linux_gnu=aarch64-linux-gnu-gcc | |
# export CXX_aarch64_unknown_linux_gnu=aarch64-linux-gnu-g++ | |
# export PKG_CONFIG_PATH=/usr/lib/aarch64-linux-gnu/pkgconfig | |
# export PKG_CONFIG_ALLOW_CROSS=1 | |
export PKG_CONFIG_SYSROOT_DIR=/usr/aarch64-linux-gnu/ | |
yarn tauri build -t aarch64-unknown-linux-gnu -v -c "{\"package\":{\"version\":\"${{ github.event.inputs.tag_version }}\"}}" -b deb || echo something not works! | |
# export CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER=arm-linux-gnueabihf-gcc | |
# export CC_armv7_unknown_linux_gnueabihf=arm-linux-gnueabihf-gcc | |
# export CXX_armv7_unknown_linux_gnueabihf=arm-linux-gnueabihf-g++ | |
# export PKG_CONFIG_PATH=/usr/lib/arm-linux-gnueabihf/pkgconfig | |
# export PKG_CONFIG_ALLOW_CROSS=1 | |
export PKG_CONFIG_SYSROOT_DIR=/usr/arm-linux-gnueabihf/ | |
yarn tauri build -t armv7-unknown-linux-gnueabihf -v -c "{\"package\":{\"version\":\"${{ github.event.inputs.tag_version }}\"}}" -b deb || echo something not works! | |
echo "build native binarys finished" | |
- name: Build Native binarys on macos | |
if: matrix.os == 'macos-latest' | |
run: | | |
echo "build native binarys..." | |
rustup target add x86_64-apple-darwin | |
rustup target add aarch64-apple-darwin | |
yarn | |
yarn tauri info | |
yarn tauri build -t x86_64-apple-darwin -c "{\"package\":{\"version\":\"${{ github.event.inputs.tag_version }}\"}}" | |
yarn tauri build -t aarch64-apple-darwin -c "{\"package\":{\"version\":\"${{ github.event.inputs.tag_version }}\"}}" | |
yarn tauri build -t universal-apple-darwin -c "{\"package\":{\"version\":\"${{ github.event.inputs.tag_version }}\"}}" || echo something not works! | |
echo "build native binarys finished" | |
- name: Build Native binarys on windows | |
if: matrix.os == 'windows-latest' | |
run: | | |
echo "build native binarys..." | |
rustup target add x86_64-pc-windows-msvc | |
rustup target add i686-pc-windows-msvc | |
rustup target add aarch64-pc-windows-msvc | |
yarn | |
yarn tauri info | |
yarn tauri build -t x86_64-pc-windows-msvc -c "{\"package\":{\"version\":\"${{ github.event.inputs.tag_version }}\"}}" | |
yarn tauri build -t i686-pc-windows-msvc -c "{\"package\":{\"version\":\"${{ github.event.inputs.tag_version }}\"}}" | |
yarn tauri build -t aarch64-pc-windows-msvc -c "{\"package\":{\"version\":\"${{ github.event.inputs.tag_version }}\"}}" -b nsis || echo something not works! | |
echo "build native binarys finished" | |
- name: Display structure of build files | |
continue-on-error: true | |
run: | | |
ls -lR src-tauri/target/ | |
- name: Prepare release files on ${{matrix.label}} | |
continue-on-error: true | |
if: matrix.os == 'ubuntu-latest' | |
run: | | |
# for 64-bit binary | |
mv src-tauri/target/x86_64-unknown-linux-gnu/release/${{env.APP_NAME}}${{matrix.executable_extension}} ${{env.APP_NAME}}-${{matrix.label}}-${{ github.event.inputs.tag_version }}_amd64${{matrix.executable_extension}} | |
mv src-tauri/target/x86_64-unknown-linux-gnu/release/bundle/appimage/${{env.APP_NAME}}_${{ github.event.inputs.tag_version }}_amd64.AppImage ${{env.APP_NAME}}-${{matrix.label}}-${{ github.event.inputs.tag_version }}_amd64.AppImage | |
mv src-tauri/target/x86_64-unknown-linux-gnu/release/bundle/deb/${{env.APP_NAME}}_${{ github.event.inputs.tag_version }}_amd64.deb ${{env.APP_NAME}}-${{matrix.label}}-${{ github.event.inputs.tag_version }}_amd64.deb | |
# for 32-bit binary | |
mv src-tauri/target/i686-unknown-linux-gnu/release/${{env.APP_NAME}}${{matrix.executable_extension}} ${{env.APP_NAME}}-${{matrix.label}}-${{ github.event.inputs.tag_version }}_i386${{matrix.executable_extension}} | |
mv src-tauri/target/i686-unknown-linux-gnu/release/bundle/appimage/${{env.APP_NAME}}_${{ github.event.inputs.tag_version }}_i386.AppImage ${{env.APP_NAME}}-${{matrix.label}}-${{ github.event.inputs.tag_version }}_i386.AppImage | |
mv src-tauri/target/i686-unknown-linux-gnu/release/bundle/deb/${{env.APP_NAME}}_${{ github.event.inputs.tag_version }}_i386.deb ${{env.APP_NAME}}-${{matrix.label}}-${{ github.event.inputs.tag_version }}_i386.deb | |
# for arm64 binary | |
mv src-tauri/target/aarch64-unknown-linux-gnu/release/${{env.APP_NAME}}${{matrix.executable_extension}} ${{env.APP_NAME}}-${{matrix.label}}-${{ github.event.inputs.tag_version }}_arm64${{matrix.executable_extension}} || true | |
# mv src-tauri/target/aarch64-unknown-linux-gnu/release/bundle/appimage/${{env.APP_NAME}}_${{ github.event.inputs.tag_version }}_arm64.AppImage ${{env.APP_NAME}}-${{matrix.label}}-${{ github.event.inputs.tag_version }}_arm64.AppImage || true | |
mv src-tauri/target/aarch64-unknown-linux-gnu/release/bundle/deb/${{env.APP_NAME}}_${{ github.event.inputs.tag_version }}_arm64.deb ${{env.APP_NAME}}-${{matrix.label}}-${{ github.event.inputs.tag_version }}_arm64.deb || true | |
# for armhf binary | |
mv src-tauri/target/armv7-unknown-linux-gnueabihf/release/${{env.APP_NAME}}${{matrix.executable_extension}} ${{env.APP_NAME}}-${{matrix.label}}-${{ github.event.inputs.tag_version }}_armhf${{matrix.executable_extension}} || true | |
# mv src-tauri/target/armv7-unknown-linux-gnueabihf/release/bundle/appimage/${{env.APP_NAME}}_${{ github.event.inputs.tag_version }}_armhf.AppImage ${{env.APP_NAME}}-${{matrix.label}}-${{ github.event.inputs.tag_version }}_armhf.AppImage || true | |
mv src-tauri/target/armv7-unknown-linux-gnueabihf/release/bundle/deb/${{env.APP_NAME}}_${{ github.event.inputs.tag_version }}_armhf.deb ${{env.APP_NAME}}-${{matrix.label}}-${{ github.event.inputs.tag_version }}_armhf.deb || true | |
- name: Prepare release files on ${{matrix.label}} | |
continue-on-error: true | |
if: matrix.os == 'macos-latest' | |
run: | | |
mv src-tauri/target/x86_64-apple-darwin/release/${{env.APP_NAME}}${{matrix.executable_extension}} ${{env.APP_NAME}}-${{matrix.label}}-${{ github.event.inputs.tag_version }}_x64${{matrix.executable_extension}} | |
mv src-tauri/target/x86_64-apple-darwin/release/bundle/dmg/${{env.APP_NAME}}_${{ github.event.inputs.tag_version }}_x64.dmg ${{env.APP_NAME}}-${{matrix.label}}-${{ github.event.inputs.tag_version }}_x64.dmg | |
7z a -tzip ${{env.APP_NAME}}-${{matrix.label}}-${{ github.event.inputs.tag_version }}_x64.app.zip ./src-tauri/target/x86_64-apple-darwin/release/bundle/macos/${{env.APP_NAME}}.app | |
mv src-tauri/target/aarch64-apple-darwin/release/${{env.APP_NAME}}${{matrix.executable_extension}} ${{env.APP_NAME}}-${{matrix.label}}-${{ github.event.inputs.tag_version }}_aarch64${{matrix.executable_extension}} | |
mv src-tauri/target/aarch64-apple-darwin/release/bundle/dmg/${{env.APP_NAME}}_${{ github.event.inputs.tag_version }}_aarch64.dmg ${{env.APP_NAME}}-${{matrix.label}}-${{ github.event.inputs.tag_version }}_aarch64.dmg | |
7z a -tzip ${{env.APP_NAME}}-${{matrix.label}}-${{ github.event.inputs.tag_version }}_aarch64.app.zip ./src-tauri/target/aarch64-apple-darwin/release/bundle/macos/${{env.APP_NAME}}.app | |
mv src-tauri/target/universal-apple-darwin/release/${{env.APP_NAME}}${{matrix.executable_extension}} ${{env.APP_NAME}}-${{matrix.label}}-${{ github.event.inputs.tag_version }}_universal${{matrix.executable_extension}} | |
mv src-tauri/target/universal-apple-darwin/release/bundle/dmg/${{env.APP_NAME}}_${{ github.event.inputs.tag_version }}_universal.dmg ${{env.APP_NAME}}-${{matrix.label}}-${{ github.event.inputs.tag_version }}_universal.dmg | |
7z a -tzip ${{env.APP_NAME}}-${{matrix.label}}-${{ github.event.inputs.tag_version }}_universal.app.zip ./src-tauri/target/universal-apple-darwin/release/bundle/macos/${{env.APP_NAME}}.app | |
- name: Prepare release files on ${{matrix.label}} | |
continue-on-error: true | |
if: matrix.os == 'windows-latest' | |
run: | | |
mv src-tauri/target/x86_64-pc-windows-msvc/release/${{env.APP_NAME}}${{matrix.executable_extension}} ${{env.APP_NAME}}-${{matrix.label}}-${{ github.event.inputs.tag_version }}_x64${{matrix.executable_extension}} | |
mv src-tauri/target/x86_64-pc-windows-msvc/release/bundle/msi/${{env.APP_NAME}}_${{ github.event.inputs.tag_version }}_x64_en-US.msi ${{env.APP_NAME}}-${{matrix.label}}-${{ github.event.inputs.tag_version }}_x64.msi | |
mv src-tauri/target/x86_64-pc-windows-msvc/release/bundle/nsis/${{env.APP_NAME}}_${{ github.event.inputs.tag_version }}_x64-setup.exe ${{env.APP_NAME}}-${{matrix.label}}-${{ github.event.inputs.tag_version }}_x64-setup.exe | |
mv src-tauri/target/i686-pc-windows-msvc/release/${{env.APP_NAME}}${{matrix.executable_extension}} ${{env.APP_NAME}}-${{matrix.label}}-${{ github.event.inputs.tag_version }}_x86${{matrix.executable_extension}} | |
mv src-tauri/target/i686-pc-windows-msvc/release/bundle/msi/${{env.APP_NAME}}_${{ github.event.inputs.tag_version }}_x86_en-US.msi ${{env.APP_NAME}}-${{matrix.label}}-${{ github.event.inputs.tag_version }}_x86.msi | |
mv src-tauri/target/i686-pc-windows-msvc/release/bundle/nsis/${{env.APP_NAME}}_${{ github.event.inputs.tag_version }}_x86-setup.exe ${{env.APP_NAME}}-${{matrix.label}}-${{ github.event.inputs.tag_version }}_x86-setup.exe | |
mv src-tauri/target/aarch64-pc-windows-msvc/release/${{env.APP_NAME}}${{matrix.executable_extension}} ${{env.APP_NAME}}-${{matrix.label}}-${{ github.event.inputs.tag_version }}_arm64${{matrix.executable_extension}} || true | |
# mv src-tauri/target/aarch64-pc-windows-msvc/release/bundle/msi/${{env.APP_NAME}}_${{ github.event.inputs.tag_version }}_arm64_en-US.msi ${{env.APP_NAME}}-${{matrix.label}}-${{ github.event.inputs.tag_version }}_arm64.msi || true | |
mv src-tauri/target/aarch64-pc-windows-msvc/release/bundle/nsis/${{env.APP_NAME}}_${{ github.event.inputs.tag_version }}_arm64-setup.exe ${{env.APP_NAME}}-${{matrix.label}}-${{ github.event.inputs.tag_version }}_arm64-setup.exe || true | |
- name: Display structure of build files | |
run: | | |
ls -l . | |
- name: 'Publish binary to release' | |
continue-on-error: true | |
uses: xresloader/upload-to-github-release@v1 | |
env: | |
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} | |
with: | |
tag_name: ${{ github.event.inputs.tag_version }} | |
file: ${{env.APP_NAME}}-${{matrix.label}}-${{ github.event.inputs.tag_version }}* | |
tags: true | |
draft: false | |
overwrite: true |