diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index f48b80f..c2dd9e6 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -48,105 +48,318 @@ jobs: echo "Workflow dispatch reason: $INPUTS_REASON" echo "Use test image: $INPUTS_USE_TEST_IMAGE" echo "Build latest as test: $INPUTS_BUILD_LATEST_AS_TEST" + binary_build_armv7: + name: Build Binary - armv7 + runs-on: ubuntu-latest + # needs: test_rust_functionality + + steps: + - name: Checkout + uses: actions/checkout@v4.1.3 + with: + fetch-depth: 0 + + - name: Run Docker on tmpfs + uses: JonasAlfredsson/docker-on-tmpfs@v1 + with: + tmpfs_size: 5 + swap_size: 4 + swap_location: "/mnt/swapfile" + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Build armv7 + uses: docker/build-push-action@v5 + with: + context: . + push: false + file: Dockerfile.build_binary + tags: sdre-hub:armv7 + platforms: linux/arm/v7 + outputs: type=local,dest=./image_armv7/ + + - name: Upload artifact armv7 binary + uses: actions/upload-artifact@v4.3.3 + with: + name: sdre-hub.armv7 + path: ./image_armv7/sdre-hub + + binary_build_arm64: + name: Build Binary - arm64 + runs-on: ubuntu-latest + # needs: test_rust_functionality + + steps: + - name: Checkout + uses: actions/checkout@v4.1.3 + with: + fetch-depth: 0 + + - name: Run Docker on tmpfs + uses: JonasAlfredsson/docker-on-tmpfs@v1 + with: + tmpfs_size: 5 + swap_size: 4 + swap_location: "/mnt/swapfile" + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Build arm64 + uses: docker/build-push-action@v5 + with: + context: . + push: false + file: Dockerfile.build_binary + tags: sdre-hub:arm64 + platforms: linux/arm64 + outputs: type=local,dest=./image_arm64/ + + - name: Upload artifact arm64 binary + uses: actions/upload-artifact@v4.3.3 + with: + name: sdre-hub.arm64 + path: ./image_arm64/sdre-hub + + binary_build_amd64: + name: Build Binary - amd64 + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4.1.3 + with: + fetch-depth: 0 + + - name: Run Docker on tmpfs + uses: JonasAlfredsson/docker-on-tmpfs@v1 + with: + tmpfs_size: 5 + swap_size: 4 + swap_location: "/mnt/swapfile" + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Build amd64 + uses: docker/build-push-action@v5 + with: + context: . + push: false + file: Dockerfile.build_binary + tags: sdre-hub:amd64 + platforms: linux/amd64 + outputs: type=local,dest=./image_amd64/ + + - name: Upload artifact amd64 binary + uses: actions/upload-artifact@v4.3.3 + with: + name: sdre-hub.amd64 + path: ./image_amd64/sdre-hub + + frontend_build: + name: Build Frontend + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4.1.2 + with: + fetch-depth: 0 - # patch_acars_hub_verison: - # name: "patch acars-hub version" - # runs-on: ubuntu-latest - # outputs: - # acarshub_version: ${{ steps.patch.outputs.acarshub_version }} - # version: ${{ steps.patch.outputs.version }} - # build_number: ${{ steps.patch.outputs.build_number }} - # steps: - # - name: Checkout - # uses: actions/checkout@v4.1.2 - # - name: patch - # id: patch - # run: | - # # get the version from version-nextgen. First line only - # VERSION=$(head -n 1 version-nextgen) - # # get the build number from the github run - # BUILD_NUMBER=$GITHUB_RUN_NUMBER - # echo "ACARS Hub: $VERSION Build $BUILD_NUMBER" - # echo "sed statement in next step will look like" - # echo "\#patch acarshub version/sed -i s\/Pre-Release\/$OUTPUT\/g" - # OUTPUT="ACARS Hub: $VERSION Build $BUILD_NUMBER" - # # set the output in github env - # echo "acarshub_version=$OUTPUT" >> $GITHUB_OUTPUT - # echo "version=$VERSION" >> $GITHUB_OUTPUT - # echo "build_number=$BUILD_NUMBER" >> $GITHUB_OUTPUT - - # deploy: - # name: Deploy - # if: | - # github.event.inputs.build_latest_as_test == 'false' || - # github.event.inputs.build_latest_as_test == '' - # uses: sdr-enthusiasts/common-github-workflows/.github/workflows/build_and_push_image.yml@main - # needs: patch_acars_hub_verison - # with: - # push_enabled: true - # push_destinations: ghcr.io - # ghcr_repo_owner: ${{ github.repository_owner }} - # ghcr_repo: ${{ github.repository }} - # # set build_latest to true if github.event.inputs.use_test_image is false - # build_latest: ${{ github.event.inputs.use_test_image == 'false' || github.event.inputs.use_test_image == '' }} - # build_baseimage_test: ${{ github.event.inputs.use_test_image == 'true' }} - # # only build the entire stack if we are not using the test image - # build_version_specific: ${{ github.event.inputs.use_test_image == 'false' || github.event.inputs.use_test_image == '' }} - # build_platform_specific: ${{ github.event.inputs.use_test_image == 'false' || github.event.inputs.use_test_image == '' }} - # build_nohealthcheck: ${{ github.event.inputs.use_test_image == 'false' || github.event.inputs.use_test_image == '' }} - # build_baseimage_url: :python/:python-test-pr - # get_version_method: file_in_container:file=/acarshub_version - # dockerfile_changes: | - # \# patch acarshub version/sed -i \"s\/Pre-Release\/${{ needs.patch_acars_hub_verison.outputs.acarshub_version}}\/g\" \/acarshub-typescript\/src\/helpers\/menu.ts - # secrets: - # ghcr_token: ${{ secrets.GITHUB_TOKEN }} - # deploy_test: - # name: Deploy as test - # if: | - # github.event.inputs.build_latest_as_test == 'true' && - # (github.event.inputs.use_test_image == 'false' || github.event.inputs.use_test_image == '') - # uses: sdr-enthusiasts/common-github-workflows/.github/workflows/build_and_push_image.yml@main - # needs: patch_acars_hub_verison - # with: - # push_enabled: true - # push_destinations: ghcr.io - # ghcr_repo_owner: ${{ github.repository_owner }} - # ghcr_repo: ${{ github.repository }} - # # set build_latest to true if github.event.inputs.use_test_image is false - # build_latest: true - # build_baseimage_test: false - # # only build the entire stack if we are not using the test image - # build_version_specific: false - # build_platform_specific: false - # build_nohealthcheck: false - # build_baseimage_url: :python/:python-test-pr - # get_version_method: file_in_container:file=/acarshub_version - # docker_latest_tag: test - # dockerfile_changes: | - # \# patch acarshub version/sed -i \"s\/Pre-Release\/${{ needs.patch_acars_hub_verison.outputs.acarshub_version}}\/g\" \/acarshub-typescript\/src\/helpers\/menu.ts - # secrets: - # ghcr_token: ${{ secrets.GITHUB_TOKEN }} - - # # generate a release - # release: - # name: Release - # needs: [deploy, patch_acars_hub_verison] - # runs-on: ubuntu-latest - # if: | - # (github.event.inputs.use_test_image == 'false' || - # github.event.inputs.use_test_image == '' ) && - # (github.event.inputs.build_latest_as_test == 'false' || - # github.event.inputs.build_latest_as_test == '' ) - - # steps: - # - name: Checkout - # uses: actions/checkout@v4.1.2 - # - name: Create Release - # uses: ncipollo/release-action@v1.14.0 - # env: - # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # with: - # tag: ${{ needs.patch_acars_hub_verison.outputs.version }}Build${{ needs.patch_acars_hub_verison.outputs.build_number }} - # name: ${{ needs.patch_acars_hub_verison.outputs.version }} Build ${{ needs.patch_acars_hub_verison.outputs.build_number }} - # draft: false - # prerelease: false + - name: Run Docker on tmpfs + uses: JonasAlfredsson/docker-on-tmpfs@v1 + with: + tmpfs_size: 5 + swap_size: 4 + swap_location: "/mnt/swapfile" + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Build amd64 + uses: docker/build-push-action@v5 + with: + context: . + push: false + file: Dockerfile.build_frontend + tags: sdre-hub:amd64 + platforms: linux/amd64 + outputs: type=local,dest=./frontend + + - name: Upload artifact amd64 binary + uses: actions/upload-artifact@v4.3.1 + with: + name: frontend + path: ./frontend/sh-frontend + + consolidate_binaries: + name: Consolidate & Cache Binaries + runs-on: ubuntu-latest + needs: + [ + binary_build_amd64, + binary_build_arm64, + binary_build_armv7, + frontend_build, + ] + steps: + - run: mkdir -p ./bin + + - uses: actions/download-artifact@v4.1.6 + with: + name: sdre-hub.amd64 + path: ./bin/sdre-hub.amd64 + + - uses: actions/download-artifact@v4.1.6 + with: + name: sdre-hub.armv7 + path: ./bin/sdre-hub.armv7 + + - uses: actions/download-artifact@v4.1.6 + with: + name: sdre-hub.arm64 + path: ./bin/sdre-hub.arm64 + + - uses: actions/download-artifact@v4.1.6 + with: + name: frontend + path: ./bin/sh-frontend + + - run: ls -la */* + + - name: Cache Binaries + uses: actions/cache@v4 + with: + path: ./bin/ + key: ${{ github.run_id }} + + publish-tauri: + name: Publish Tauri + permissions: + contents: write + strategy: + fail-fast: false + matrix: + include: + - platform: "macos-latest" # for Arm based macs (M1 and above). + args: "--target aarch64-apple-darwin" + - platform: "macos-latest" # for Intel based macs. + args: "--target x86_64-apple-darwin" + - platform: "ubuntu-22.04" # for Tauri v1 you could replace this with ubuntu-20.04. + args: "" + - platform: "windows-latest" + args: "" + if: | + (github.event.inputs.use_test_image == 'false' || + github.event.inputs.use_test_image == '' ) && + (github.event.inputs.build_latest_as_test == 'false' || + github.event.inputs.build_latest_as_test == '' ) + runs-on: ${{ matrix.platform }} + steps: + - uses: actions/checkout@v4 + + - name: setup node + uses: actions/setup-node@v4 + with: + node-version: lts/* + + - name: install Rust stable + uses: dtolnay/rust-toolchain@stable + with: + # Those targets are only used on macos runners so it's in an `if` to slightly speed up windows and linux builds. + targets: ${{ matrix.platform == 'macos-latest' && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }} + + - name: install dependencies (ubuntu only) + if: matrix.platform == 'ubuntu-22.04' # This must match the platform value defined above. + run: | + sudo apt-get update + sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libsoup2.4-dev libjavascriptcoregtk-4.0-dev libwebkit2gtk-4.0-dev + + - name: install other stuff + run: | + curl -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash + curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh + cargo binstall trunk wasm-bindgen-cli --no-confirm + rustup target add wasm32-unknown-unknown + + # - name: install frontend dependencies + # run: yarn install # change this to npm, pnpm or bun depending on which one you use. + + - uses: tauri-apps/tauri-action@v0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tagName: app-v__VERSION__ # the action automatically replaces \_\_VERSION\_\_ with the app version. + releaseName: "App v__VERSION__" + releaseBody: "See the assets to download this version and install." + releaseDraft: false + prerelease: false + args: ${{ matrix.args }} + + deploy: + name: Deploy + if: | + github.event.inputs.build_latest_as_test == 'false' || + github.event.inputs.build_latest_as_test == '' + needs: [consolidate_binaries] + uses: sdr-enthusiasts/common-github-workflows/.github/workflows/build_and_push_image.yml@main + with: + push_enabled: true + push_destinations: ghcr.io + build_with_tmpfs: true + ghcr_repo_owner: ${{ github.repository_owner }} + ghcr_repo: ${{ github.repository }} + # set build_latest to true if github.event.inputs.use_test_image is false + build_latest: ${{ github.event.inputs.use_test_image == 'false' || github.event.inputs.use_test_image == '' }} + build_baseimage_test: ${{ github.event.inputs.use_test_image == 'true' }} + # only build the entire stack if we are not using the test image + build_version_specific: ${{ github.event.inputs.use_test_image == 'false' || github.event.inputs.use_test_image == '' }} + build_platform_specific: ${{ github.event.inputs.use_test_image == 'false' || github.event.inputs.use_test_image == '' }} + build_nohealthcheck: ${{ github.event.inputs.use_test_image == 'false' || github.event.inputs.use_test_image == '' }} + build_baseimage_url: :base/:base-test-pr + get_version_method: cargo_toml_file_in_repo:file=/Cargo.toml + cache_enabled: true + cache_path: ./bin/ + + secrets: + ghcr_token: ${{ secrets.GITHUB_TOKEN }} + deploy_test: + name: Deploy as test + needs: [consolidate_binaries] + if: | + github.event.inputs.build_latest_as_test == 'true' && + (github.event.inputs.use_test_image == 'false' || github.event.inputs.use_test_image == '') + uses: sdr-enthusiasts/common-github-workflows/.github/workflows/build_and_push_image.yml@main + with: + push_enabled: true + push_destinations: ghcr.io + build_with_tmpfs: true + ghcr_repo_owner: ${{ github.repository_owner }} + ghcr_repo: ${{ github.repository }} + # set build_latest to true if github.event.inputs.use_test_image is false + build_latest: true + build_baseimage_test: false + # only build the entire stack if we are not using the test image + build_version_specific: false + build_platform_specific: false + build_nohealthcheck: false + build_baseimage_url: :base/:base-test-pr + get_version_method: cargo_toml_file_in_repo:file=/Cargo.toml + cache_enabled: true + cache_path: ./bin/ + docker_latest_tag: test + secrets: + ghcr_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/on_pr.yaml b/.github/workflows/on_pr.yaml index 09754de..728f6f4 100644 --- a/.github/workflows/on_pr.yaml +++ b/.github/workflows/on_pr.yaml @@ -263,3 +263,62 @@ jobs: cache_enabled: true cache_path: ./bin/ cache_key: ${{ github.run_id }} + + publish-tauri: + name: Publish Tauri + permissions: + contents: write + strategy: + fail-fast: false + matrix: + include: + - platform: "macos-latest" # for Arm based macs (M1 and above). + args: "--target aarch64-apple-darwin" + - platform: "macos-latest" # for Intel based macs. + args: "--target x86_64-apple-darwin" + - platform: "ubuntu-22.04" # for Tauri v1 you could replace this with ubuntu-20.04. + args: "" + - platform: "windows-latest" + args: "" + + runs-on: ${{ matrix.platform }} + steps: + - uses: actions/checkout@v4 + + - name: setup node + uses: actions/setup-node@v4 + with: + node-version: lts/* + + - name: install Rust stable + uses: dtolnay/rust-toolchain@stable + with: + # Those targets are only used on macos runners so it's in an `if` to slightly speed up windows and linux builds. + targets: ${{ matrix.platform == 'macos-latest' && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }} + + - name: install dependencies (ubuntu only) + if: matrix.platform == 'ubuntu-22.04' # This must match the platform value defined above. + run: | + sudo apt-get update + sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libsoup2.4-dev libjavascriptcoregtk-4.0-dev libwebkit2gtk-4.0-dev + + - name: install other stuff + run: | + curl -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash + curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh + cargo binstall trunk wasm-bindgen-cli --no-confirm + rustup target add wasm32-unknown-unknown + + # - name: install frontend dependencies + # run: yarn install # change this to npm, pnpm or bun depending on which one you use. + + - uses: tauri-apps/tauri-action@v0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tagName: app-v__VERSION__ # the action automatically replaces \_\_VERSION\_\_ with the app version. + releaseName: "App v__VERSION__" + releaseBody: "See the assets to download this version and install." + releaseDraft: true + prerelease: false + args: ${{ matrix.args }} diff --git a/README.md b/README.md index d8f1ac1..0a28008 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ Sorry, there is no migration path from ACARS Hub to SDR-E Hub. The data that ACA - [x] Docker build - [x] Application build - [ ] Manage settings from the web interface - - [ ] GitHub CI + - [x] GitHub CI - [ ] Alpha 2 - [ ] Connect to data providers - [ ] ADSB diff --git a/src/bin/sh-tauri/Cargo.toml b/src/bin/sh-tauri/Cargo.toml index af1f626..c21bf5a 100644 --- a/src/bin/sh-tauri/Cargo.toml +++ b/src/bin/sh-tauri/Cargo.toml @@ -25,3 +25,7 @@ sdrehub = { path = "../../libraries/sdrehub" } sh-config = { path = "../../libraries/sh-config" } tauri = { version = "1.6.2", features = ["api-all"] } tokio = { version = "1.37.0", features = ["full", "tracing"] } + +[features] +default = ["custom-protocol"] +custom-protocol = ["tauri/custom-protocol"] diff --git a/src/bin/sh-tauri/tauri.conf.json b/src/bin/sh-tauri/tauri.conf.json index 53c1d6f..81979b3 100644 --- a/src/bin/sh-tauri/tauri.conf.json +++ b/src/bin/sh-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "package": { "productName": "SDR-E Hub", - "version": "4.0.0-alpha.1" + "version": "4.0.0-1" }, "build": { "distDir": "../../../sh-frontend/dist", diff --git a/src/libraries/sh-api/src/lib.rs b/src/libraries/sh-api/src/lib.rs index 04e6b3c..fc58468 100644 --- a/src/libraries/sh-api/src/lib.rs +++ b/src/libraries/sh-api/src/lib.rs @@ -32,6 +32,7 @@ impl ShDataUser for ShAPIServer { self.run_apiserver().await } + // TODO: Can we dynamically start/stop/restart the web server? fn stop(&self) { // Stop the web server }