Add auto-updating system [electron-only] #2970
Workflow file for this run
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: CI | |
on: | |
workflow_dispatch: | |
pull_request: | |
push: | |
schedule: | |
# Run every 6 days to help us stay on our toes | |
- cron: '0 0 */6 * *' | |
jobs: | |
test: | |
name: Test | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Install dependencies | |
run: | | |
sudo apt install -y xvfb | |
- uses: oven-sh/setup-bun@v1 | |
with: | |
bun-version: latest | |
- name: Run bun | |
run: | | |
bun install --frozen-lockfile | |
bun run lint | |
bun run typecheck | |
bun run build | |
deploy-page: | |
needs: test | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- uses: oven-sh/setup-bun@v1 | |
with: | |
bun-version: latest | |
- name: Run bun | |
run: | | |
bun install --frozen-lockfile | |
bun run build | |
- name: Deploy 🚀 | |
uses: JamesIves/[email protected] | |
if: success() && github.event_name != 'pull_request' | |
with: | |
branch: gh-pages | |
folder: dist | |
deploy-electron: | |
needs: test | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- os: macos-13 | |
suffix: mac | |
arch: x64 | |
extension: dmg | |
latestMetadataName: latest-mac.yml | |
- os: ubuntu-latest | |
suffix: linux | |
arch: x86_64 | |
extension: AppImage | |
latestMetadataName: latest-linux.yml | |
- os: ubuntu-24-arm | |
suffix: linux | |
arch: arm64 | |
extension: AppImage | |
latestMetadataName: latest-linux-arm64.yml | |
- os: windows-latest | |
suffix: win | |
arch: x64 | |
extension: exe | |
latestMetadataName: latest.yml | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
fetch-depth: 0 | |
- name: Install snapcraft for arm64 | |
if: matrix.os == 'ubuntu-24-arm' | |
run: | | |
sudo apt update | |
sudo apt install -y --fix-missing snapd | |
sudo snap install snapcraft --classic | |
- uses: oven-sh/setup-bun@v1 | |
with: | |
bun-version: latest | |
- name: Set version as environment variable (Windows) | |
if: matrix.os == 'windows-latest' | |
run: echo "VERSION=$(git describe --tags --abbrev=0 | sed 's/^v//')" >> $env:GITHUB_ENV | |
- name: Set version as environment variable (others) | |
if: matrix.os != 'windows-latest' | |
run: echo "VERSION=$(git describe --tags --abbrev=0 | sed 's/^v//')" >> $GITHUB_ENV | |
- name: Bun build | |
run: | | |
bun install --frozen-lockfile | |
bun run build | |
- name: Bun deploy (arm) | |
if: matrix.os == 'ubuntu-24-arm' | |
run: | | |
SNAPCRAFT_BUILD_ENVIRONMENT="host" bun run deploy:electron | |
- name: Bun deploy (others) | |
if: matrix.os != 'ubuntu-24-arm' | |
run: | | |
bun run deploy:electron | |
- name: Upload binary artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: Cockpit-${{ matrix.suffix }}-${{ matrix.arch }}-${{ env.VERSION }}.${{ matrix.extension }} | |
path: dist/Cockpit-${{ matrix.suffix }}-${{ matrix.arch }}-${{ env.VERSION }}.${{ matrix.extension }} | |
if-no-files-found: error | |
- name: Upload diff artifact (mac-only) | |
if: matrix.os == 'macos-13' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: Cockpit-${{ matrix.suffix }}-${{ matrix.arch }}-${{ env.VERSION }}.zip | |
path: dist/Cockpit*.zip | |
if-no-files-found: error | |
- name: Upload latest metadata artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ matrix.latestMetadataName }} | |
path: dist/latest*.yml | |
if-no-files-found: error | |
- name: Upload binary release | |
uses: svenstaro/upload-release-action@v2 | |
if: startsWith(github.ref, 'refs/tags/') && success() | |
with: | |
repo_token: ${{ secrets.GITHUB_TOKEN }} | |
file: dist/Cockpit-${{ matrix.suffix }}-${{ matrix.arch }}-${{ env.VERSION }}.${{ matrix.extension }} | |
tag: ${{ github.ref }} | |
overwrite: true | |
prerelease: true | |
file_glob: true | |
- name: Upload diff release (mac-only) | |
uses: svenstaro/upload-release-action@v2 | |
if: startsWith(github.ref, 'refs/tags/') && success() && matrix.os == 'macos-13' | |
with: | |
repo_token: ${{ secrets.GITHUB_TOKEN }} | |
file: dist/Cockpit-${{ matrix.suffix }}-${{ matrix.arch }}-${{ env.VERSION }}.zip | |
tag: ${{ github.ref }} | |
overwrite: true | |
prerelease: true | |
file_glob: true | |
- name: Upload latest metadata release | |
uses: svenstaro/upload-release-action@v2 | |
if: startsWith(github.ref, 'refs/tags/') && success() | |
with: | |
repo_token: ${{ secrets.GITHUB_TOKEN }} | |
file: dist/${{ matrix.latestMetadataName }} | |
tag: ${{ github.ref }} | |
overwrite: true | |
prerelease: true | |
file_glob: true | |
deploy-flatpak: | |
needs: test | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- os: ubuntu-latest | |
suffix: linux | |
arch: x86_64 | |
extension: flatpak | |
- os: ubuntu-24-arm | |
suffix: linux | |
arch: arm64 | |
extension: flatpak | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
fetch-depth: 0 | |
- uses: oven-sh/setup-bun@v1 | |
with: | |
bun-version: latest | |
- name: Install flatpak | |
run: | | |
sudo apt update | |
sudo apt install -y --fix-missing flatpak flatpak-builder | |
sudo flatpak remote-add --system flathub https://flathub.org/repo/flathub.flatpakrepo | |
flatpak remote-add --user flathub https://flathub.org/repo/flathub.flatpakrepo || true | |
- name: Set version as environment variable (others) | |
run: echo "VERSION=$(git describe --tags --abbrev=0 | sed 's/^v//')" >> $GITHUB_ENV | |
- name: Build electron (arm) | |
if: matrix.os == 'ubuntu-24-arm' | |
run: | | |
bun install --frozen-lockfile | |
bun run build | |
env DEBUG="@malept/flatpak-bundler" bun run deploy:flatpak --arm64 | |
- name: Build electron (x86_64) | |
if: matrix.os == 'ubuntu-latest' | |
run: | | |
bun install --frozen-lockfile | |
bun run build | |
env DEBUG="@malept/flatpak-bundler" bun run deploy:flatpak --x64 | |
- name: Rename 'aarch64' to 'arm64' | |
if: matrix.os == 'ubuntu-24-arm' | |
run: | | |
mv dist/Cockpit-${{ matrix.suffix }}-aarch64-${{ env.VERSION }}.${{ matrix.extension }} dist/Cockpit-${{ matrix.suffix }}-${{ matrix.arch }}-${{ env.VERSION }}.${{ matrix.extension }} | |
- name: Upload Artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: Cockpit-${{ matrix.suffix }}-${{ matrix.arch }}-${{ env.VERSION }}.${{ matrix.extension }} | |
path: dist/Cockpit-${{ matrix.suffix }}-${{ matrix.arch }}-${{ env.VERSION }}.${{ matrix.extension }} | |
if-no-files-found: error | |
- name: Upload Release | |
uses: svenstaro/upload-release-action@v2 | |
if: startsWith(github.ref, 'refs/tags/') && success() | |
with: | |
repo_token: ${{ secrets.GITHUB_TOKEN }} | |
file: dist/Cockpit-${{ matrix.suffix }}-${{ matrix.arch }}-${{ env.VERSION }}.${{ matrix.extension }} | |
tag: ${{ github.ref }} | |
overwrite: true | |
prerelease: true | |
file_glob: true | |
deploy-blueos-extension: | |
needs: test | |
runs-on: ubuntu-latest | |
env: | |
PLATFORMS: "linux/arm/v7,linux/arm64/v8,linux/amd64" | |
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} | |
steps: | |
- name: Login to Docker Hub | |
if: success() && github.event_name != 'pull_request' | |
uses: docker/login-action@v2 | |
with: | |
username: ${{ secrets.DOCKER_USERNAME }} | |
password: ${{ secrets.DOCKER_PASSWORD }} | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- uses: oven-sh/setup-bun@v1 | |
with: | |
bun-version: latest | |
- name: Build cockpit | |
run: | | |
bun install --frozen-lockfile | |
bun run build | |
- name: Prepare | |
id: prepare | |
run: | | |
# Deploy image with the name of the branch, if the build is a git tag, replace tag with the tag name. | |
# If git tag matches semver, append latest tag to the push. | |
DOCKER_IMAGE=${DOCKER_USERNAME:-bluerobotics}/cockpit | |
VERSION=${GITHUB_REF##*/} | |
if [[ $GITHUB_REF == refs/tags/* ]]; then | |
VERSION=${GITHUB_REF#refs/tags/} | |
fi | |
TAGS="--tag ${DOCKER_IMAGE}:${VERSION}" | |
if [[ $VERSION =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then | |
TAGS="$TAGS --tag ${DOCKER_IMAGE}:latest" | |
fi | |
echo "docker_image=${DOCKER_IMAGE}" >> $GITHUB_OUTPUT | |
echo "version=${VERSION}" >> $GITHUB_OUTPUT | |
echo "buildx_args=${TAGS} --file Dockerfile ." >> $GITHUB_OUTPUT | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v2 | |
with: | |
platforms: all | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v2 | |
with: | |
version: latest | |
- name: Docker Buildx (build) | |
run: | | |
docker buildx build \ | |
--output "type=image,push=false" \ | |
--platform $PLATFORMS \ | |
${{ steps.prepare.outputs.buildx_args }} | |
- name: Docker Buildx (push) | |
if: success() && github.event_name != 'pull_request' | |
run: | | |
docker buildx build \ | |
--output "type=image,push=true" \ | |
--platform $PLATFORMS \ | |
${{ steps.prepare.outputs.buildx_args }} | |
- name: Inspect image | |
if: always() && github.event_name != 'pull_request' | |
run: | | |
docker buildx imagetools \ | |
inspect ${{ steps.prepare.outputs.docker_image }}:${{ steps.prepare.outputs.version }} |