name: Linux on: [push, pull_request] jobs: build: runs-on: ubuntu-latest container: image: ubuntu:20.04 env: DEBIAN_FRONTEND: noninteractive steps: - uses: actions/checkout@v4 with: sparse-checkout: .github/workflows/env - name: Read variables from repo run: cat .github/workflows/env >> $GITHUB_ENV - name: Install dependencies run: | export PYVER_MINOR=${PYVER%.*} echo "PYVER_MINOR: $PYVER_MINOR" apt-get update apt-get install -qq curl software-properties-common libnotify-dev libayatana-appindicator3-dev patchelf add-apt-repository -y ppa:git-core/ppa add-apt-repository -y ppa:deadsnakes/ppa apt-get install -qq git python$PYVER_MINOR-dev python$PYVER_MINOR-venv git config --global --add safe.directory "$GITHUB_WORKSPACE" ln -s `which python$PYVER_MINOR` /usr/local/bin/python ln -s `which python$PYVER_MINOR` /usr/local/bin/python3 PYVER_TEMP=`/usr/local/bin/python --version` export PYVERINST=${PYVER_TEMP#* } echo "PYVERINST=$PYVERINST" >> $GITHUB_ENV echo "Installed python version: $PYVERINST" python -m ensurepip --user python -m pip install -U pip pipx - name: Verify Python version if: ${{ env.PYVERINST != env.PYVER }} run: | echo "Python version not compatible" echo "Installed python version: $PYVERINST" echo "Expected: $PYVER" exit 1 - uses: actions/checkout@v4 - name: Check app versions run: | python set-version.py git diff --exit-code - name: Cache helper id: cache-helper uses: actions/cache@v4 with: path: | build/linux/helper assets/licenses/helper.json key: ${{ runner.os }}-py${{ env.PYVER }}-${{ hashFiles('helper/**') }} - name: Build the Helper if: steps.cache-helper.outputs.cache-hit != 'true' run: | apt-get install -qq swig libpcsclite-dev build-essential cmake export PATH=$PATH:$HOME/.local/bin # Needed to ensure pipx/poetry on PATH pipx install poetry ./build-helper.sh - name: Install Flutter dependencies run: | apt-get install -qq clang cmake ninja-build pkg-config libgtk-3-dev jq - uses: subosito/flutter-action@v2 with: channel: 'stable' flutter-version: ${{ env.FLUTTER }} - name: Configure Flutter run: | git config --global --add safe.directory $FLUTTER_ROOT flutter config --enable-linux-desktop flutter --version - name: Run lints/tests env: SKIP: ${{ steps.cache-helper.outputs.cache-hit == 'true' && 'mypy,flake8,black,bandit' || ''}} run: | export PATH=$PATH:$HOME/.local/bin # Needed to ensure pip/pre-commit on PATH pipx install pre-commit pre-commit run --all-files flutter test - name: Build the app run: flutter build linux - name: Check generated files run: git diff --exit-code - name: Embedd appindicator run: | patchelf --set-rpath '$ORIGIN' build/linux/x64/release/bundle/lib/libtray_manager_plugin.so cp -L /usr/lib/x86_64-linux-gnu/libayatana-appindicator3.so.1 build/linux/x64/release/bundle/lib/ patchelf --set-rpath '$ORIGIN' build/linux/x64/release/bundle/lib/libayatana-appindicator3.so.1 cp -L /usr/lib/x86_64-linux-gnu/libayatana-indicator3.so.7 build/linux/x64/release/bundle/lib/ patchelf --set-rpath '$ORIGIN' build/linux/x64/release/bundle/lib/libayatana-indicator3.so.7 cp -L /usr/lib/x86_64-linux-gnu/libdbusmenu-glib.so.4 build/linux/x64/release/bundle/lib/ patchelf --set-rpath '$ORIGIN' build/linux/x64/release/bundle/lib/libdbusmenu-glib.so.4 cp -L /usr/lib/x86_64-linux-gnu/libdbusmenu-gtk3.so.4 build/linux/x64/release/bundle/lib/ patchelf --set-rpath '$ORIGIN' build/linux/x64/release/bundle/lib/libdbusmenu-gtk3.so.4 - name: Rename and archive app run: | export REF=$(echo ${GITHUB_REF} | cut -d '/' -f 3) export BASENAME="yubioath-desktop-${REF}-linux" mkdir deploy mv build/linux/x64/release/bundle "build/${BASENAME}" tar -czf deploy/${BASENAME}.tar.gz -C build "${BASENAME}" - name: Upload artifact uses: actions/upload-artifact@v4 with: name: yubioath-desktop-linux path: deploy