Skip to content

Commit

Permalink
github actions test
Browse files Browse the repository at this point in the history
  • Loading branch information
sun-jiao committed Mar 4, 2024
1 parent adac36a commit 920e78e
Show file tree
Hide file tree
Showing 4 changed files with 242 additions and 129 deletions.
254 changes: 126 additions & 128 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -1,72 +1,68 @@
name: Flutter CI

on:
push:
tags:
- "*"
on: push

jobs:
build-and-release-linux:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- uses: subosito/flutter-action@v2
with:
channel: 'stable'
architecture: x64
- name: Update dependencies
run: sudo apt-get update
- name: Install dependencies
run: sudo apt-get install -y clang cmake ninja-build pkg-config libgtk-3-0 libgtk-3-dev libblkid1 liblzma5
- name: Install project dependencies
run: flutter pub get
- name: Enable linux build
run: flutter config --enable-linux-desktop
- name: Build artifacts
run: flutter build linux --release
- name: Build Appimage
run: bash ./github_appimage_build.sh
- name: Compress action step
uses: a7ul/[email protected]
id: compress
with:
command: c
files: build/linux/x64/release/bundle/
outPath: renamer-linux.tar.gz
- name: Linux Release
uses: actions/upload-artifact@v4
with:
name: renamer-linux
path: renamer-linux.tar.gz
- name: Linux Appimage Release
uses: actions/upload-artifact@v4
with:
name: renamer-appimage
path: Renamer-x86_64.AppImage
- uses: actions/setup-java@v2
with:
distribution: 'zulu'
java-version: '17.x'
- name: decode key base64
run: echo $KEYSTORE_BASE64 | base64 -di > ./android/app/renamer.jks
env:
KEYSTORE_BASE64: ${{ secrets.KEYSTORE_BASE64 }}
- name: Build android
run: |
flutter build apk --release
flutter build apk --release --split-per-abi
env:
KEYSTORE: renamer.jks
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD}}
- name: Android Release
uses: actions/upload-artifact@v4
with:
name: renamer-android
path: build/app/outputs/flutter-apk

# build-and-release-linux:
# runs-on: ubuntu-latest
#
# steps:
# - uses: actions/checkout@v4
# - uses: subosito/flutter-action@v2
# with:
# channel: 'stable'
# architecture: x64
# - name: Update dependencies
# run: sudo apt-get update
# - name: Install dependencies
# run: sudo apt-get install -y clang cmake ninja-build pkg-config libgtk-3-0 libgtk-3-dev libblkid1 liblzma5
# - name: Install project dependencies
# run: flutter pub get
# - name: Enable linux build
# run: flutter config --enable-linux-desktop
# - name: Build artifacts
# run: flutter build linux --release
# - name: Build Appimage
# run: bash ./github_appimage_build.sh
# - name: Compress action step
# uses: a7ul/[email protected]
# id: compress
# with:
# command: c
# files: build/linux/x64/release/bundle/
# outPath: renamer-linux.tar.gz
# - name: Linux Release
# uses: actions/upload-artifact@v4
# with:
# name: renamer-linux
# path: renamer-linux.tar.gz
# - name: Linux Appimage Release
# uses: actions/upload-artifact@v4
# with:
# name: renamer-appimage
# path: Renamer-x86_64.AppImage
# - uses: actions/setup-java@v2
# with:
# distribution: 'zulu'
# java-version: '17.x'
# - name: decode key base64
# run: echo $KEYSTORE_BASE64 | base64 -di > ./android/app/renamer.jks
# env:
# KEYSTORE_BASE64: ${{ secrets.KEYSTORE_BASE64 }}
# - name: Build android
# run: |
# flutter build apk --release
# flutter build apk --release --split-per-abi
# env:
# KEYSTORE: renamer.jks
# KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
# KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
# KEY_PASSWORD: ${{ secrets.KEY_PASSWORD}}
# - name: Android Release
# uses: actions/upload-artifact@v4
# with:
# name: renamer-android
# path: build/app/outputs/flutter-apk

build-and-release-windows:
runs-on: windows-latest
Expand All @@ -91,72 +87,74 @@ jobs:
node-version: 20
- name: install evb
run: npm install enigmavirtualbox -g
- name: create evb file
run: dart .\dev\windows_evb_config_generator.dart
- name: build single exe file
run: enigmavirtualbox cli ".\evb\renamer.evb"
run: enigmavirtualbox cli "renamer.evb"
- name: Windows Release
uses: actions/upload-artifact@v4
with:
name: renamer-win
path: renamer.exe

build-and-release-macos:
runs-on: macos-14

steps:
- uses: actions/checkout@v4
- uses: subosito/flutter-action@v2
with:
channel: 'stable'
architecture: arm64
- name: Install project dependencies
run: flutter pub get
- name: Enable macOS build
run: flutter config --enable-macos-desktop
- name: Build artifacts
run: flutter build macos --release
- name: install npm
run: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- name: install appdmg
run: npm install -g appdmg
- name: build dmg
run: appdmg ./dmg/config.json ./build/macos/Build/Products/Release/renamer.dmg
- name: macOS Release
uses: actions/upload-artifact@v4
with:
name: renamer-macos
path: build/macos/Build/Products/Release/renamer.dmg
- name: Build ios
run: |
flutter build ios --release --no-codesign
ln -sf ./build/ios/iphoneos Payload
zip -r9 renamer-release.ipa Payload/runner.app
- name: ios Release
uses: actions/upload-artifact@v4
with:
name: renamer-ios
path: renamer-release.ipa


upload:
runs-on: ubuntu-latest

needs:
- build-and-release-linux
- build-and-release-windows
- build-and-release-macos
steps:
- uses: actions/download-artifact@v4
with:
path: ./renamer-release
merge-multiple: true
- name: Install dependencies
run: sudo apt-get install tree -y
- name: Upload Release
uses: ncipollo/release-action@v1
with:
token: ${{ secrets.GIT_TOKEN }}
omitBodyDuringUpdate: true
omitNameDuringUpdate: true
omitPrereleaseDuringUpdate: true
allowUpdates: true
artifacts: renamer-release/*
#
# build-and-release-macos:
# runs-on: macos-14
#
# steps:
# - uses: actions/checkout@v4
# - uses: subosito/flutter-action@v2
# with:
# channel: 'stable'
# architecture: arm64
# - name: Install project dependencies
# run: flutter pub get
# - name: Enable macOS build
# run: flutter config --enable-macos-desktop
# - name: Build artifacts
# run: flutter build macos --release
# - name: install npm
# run: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# - name: install appdmg
# run: npm install -g appdmg
# - name: build dmg
# run: appdmg ./dmg/config.json ./build/macos/Build/Products/Release/renamer.dmg
# - name: macOS Release
# uses: actions/upload-artifact@v4
# with:
# name: renamer-macos
# path: build/macos/Build/Products/Release/renamer.dmg
# - name: Build ios
# run: |
# flutter build ios --release --no-codesign
# ln -sf ./build/ios/iphoneos Payload
# zip -r9 renamer-release.ipa Payload/runner.app
# - name: ios Release
# uses: actions/upload-artifact@v4
# with:
# name: renamer-ios
# path: renamer-release.ipa
#
#
# upload:
# runs-on: ubuntu-latest
#
# needs:
# - build-and-release-linux
# - build-and-release-windows
# - build-and-release-macos
# steps:
# - uses: actions/download-artifact@v4
# with:
# path: ./renamer-release
# merge-multiple: true
# - name: Install dependencies
# run: sudo apt-get install tree -y
# - name: Upload Release
# uses: ncipollo/release-action@v1
# with:
# token: ${{ secrets.GIT_TOKEN }}
# omitBodyDuringUpdate: true
# omitNameDuringUpdate: true
# omitPrereleaseDuringUpdate: true
# allowUpdates: true
# artifacts: renamer-release/*
5 changes: 5 additions & 0 deletions build.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
targets:
$default:
sources:
exclude:
- dev/**.dart
109 changes: 109 additions & 0 deletions dev/windows_evb_config_generator.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
import 'dart:io';

import 'package:xml/xml.dart';

void main() {
XmlBuilder builder = XmlBuilder();
builder.processing('xml', 'version="1.0" encoding="windows-1252"');
// evb needs absolute dir, in fact the relative dir works in wine, but not work on
// Windows runner of Github Actions. I cannot test it on a physical Windows machine.
final windowsBuildDir = Directory(r"build/linux/x64/release/bundle").absolute; // use this for test: "build/linux/x64/release/bundle"
final entities = windowsBuildDir.listSync();
final input = entities.firstWhere((e) => e is File && e.path.endsWith('renamer'));
final output = File(input.name).absolute;
entities.removeWhere((e) => e is File && e.path.endsWith('renamer'));

builder.element('', nest: () {
builder.element('InputFile', nest: input.path);
builder.element('OutputFile', nest: output.path);
builder.element('Files', nest: () {
builder.element('Enabled', nest: 'True');
builder.element('DeleteExtractedOnExit', nest: 'False');
builder.element('CompressFiles', nest: 'False');
buildDir(builder, '%DEFAULT FOLDER%', entities);
});
builder.element('Registries', nest: () {
builder.element('Enabled', nest: 'False');
builder.element('Registries', nest: () {
buildRegistry(builder, 'Classes');
buildRegistry(builder, 'User');
buildRegistry(builder, 'Machine');
buildRegistry(builder, 'Users');
buildRegistry(builder, 'Config');
});
});
builder.element('Packaging', nest: () {
builder.element('Enabled', nest: 'False');
});
builder.element('Options', nest: () {
builder.element('ShareVirtualSystem', nest: 'False');
builder.element('MapExecutableWithTemporaryFile', nest: 'True');
builder.element('TemporaryFileMask');
builder.element('AllowRunningOfVirtualExeFiles', nest: 'True');
builder.element('ProcessesOfAnyPlatforms', nest: 'False');
});
builder.element('Storage', nest: () {
builder.element('Storage', nest: () {
builder.element('Enabled', nest: 'False');
builder.element('Folder', nest: '%DEFAULT FOLDER%\\');
builder.element('RandomFileNames', nest: 'False');
builder.element('EncryptContent', nest: 'False');
builder.element('ProcessesOfAnyPlatforms', nest: 'False');
});
});
});

final document = builder.buildDocument();
File('renamer.evb').writeAsStringSync(document.toXmlString(pretty: true));
}

void buildFile(XmlBuilder builder, String name, String path) {
builder.element('File', nest: () {
builder.element('Type', nest: 2);
builder.element('Name', nest: name);
builder.element('File', nest: path);
builder.element('ActiveX', nest: 'False');
builder.element('ActiveXInstall', nest: 'False');
builder.element('Action', nest: 0);
builder.element('OverwriteDateTime', nest: 'False');
builder.element('OverwriteAttributes', nest: 'False');
builder.element('PassCommandLine', nest: 'False');
builder.element('HideFromDialogs', nest: 0);
});
}

void buildDir(XmlBuilder builder, String name, List<FileSystemEntity> entities) {
builder.element('File', nest: () {
builder.element('Type', nest: 3);
builder.element('Name', nest: name);
builder.element('Action', nest: 0);
builder.element('OverwriteDateTime', nest: 'False');
builder.element('OverwriteAttributes', nest: 'False');
builder.element('HideFromDialogs', nest: 0);
builder.element('Files', nest: () {
for (final file in entities.whereType<File>()) {
buildFile(builder, file.name, file.absolute.path);
}

for (final dir in entities.whereType<Directory>()) {
buildDir(builder, dir.name, dir.listSync());
}
});
});
}

void buildRegistry(XmlBuilder builder, String name) {
builder.element('File', nest: () {
builder.element('Type', nest: 1);
builder.element('Virtual', nest: 'True');
builder.element('Name', nest: name);
builder.element('ValueType', nest: 0);
builder.element('Value');
builder.element('Registries');
});
}

extension on FileSystemEntity {
// get file name
String get name => path.substring(path.lastIndexOf(Platform.pathSeparator) + 1);
}
Loading

0 comments on commit 920e78e

Please sign in to comment.