Allow for dynamic Cockpit Actions and add support for customizable HTTP request actions #2773
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: macos | |
extension: dmg | |
- os: ubuntu-latest | |
suffix: linux | |
extension: AppImage | |
- os: ubuntu-24-arm | |
suffix: linux-arm | |
extension: AppImage | |
- os: windows-latest | |
suffix: windows | |
extension: exe | |
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: 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 deploy:electron | |
- name: Bun deploy (others) | |
if: matrix.os != 'ubuntu-24-arm' | |
run: | | |
bun deploy:electron | |
- name: Build artifact name | |
if: "!startsWith(github.ref, 'refs/tags/') && success()" | |
run: | | |
mv dist/Cockpit*.${{ matrix.extension }} dist/Cockpit-${{ matrix.suffix }}-$(git describe --tags).${{ matrix.extension }} | |
- name: Build tag name | |
if: startsWith(github.ref, 'refs/tags/') && success() | |
run: | | |
mv dist/Cockpit*.${{ matrix.extension }} dist/Cockpit-${{ matrix.suffix }}-$(git describe --tags --abbrev=0).${{ matrix.extension }} | |
- name: Upload Artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: cockpit-${{ matrix.suffix }} | |
path: dist/Cockpit-${{ matrix.suffix }}-*.${{ 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.extension }} | |
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 | |
- os: ubuntu-24-arm | |
suffix: linux-arm | |
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: Build electron | |
run: | | |
bun install --frozen-lockfile | |
bun run build | |
env DEBUG="@malept/flatpak-bundler" bun deploy:flatpak | |
- name: Build tag name | |
if: startsWith(github.ref, 'refs/tags/') && success() | |
run: | | |
mv dist/Cockpit*.flatpak dist/Cockpit-${{ matrix.suffix }}-$(git describe --tags --abbrev=0).flatpak | |
- name: Build name | |
if: "!startsWith(github.ref, 'refs/tags/') && success()" | |
run: | | |
mv dist/Cockpit*.flatpak dist/Cockpit-${{ matrix.suffix }}-$(git describe --tags).flatpak | |
- name: Upload Artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: cockpit-${{ matrix.suffix }}-flatpak | |
path: dist/Cockpit*.flatpak | |
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*.flatpak | |
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 }} |