diff --git a/.github/workflows/build-deskktop-pr.yml b/.github/workflows/build-desktop-pr.yml similarity index 100% rename from .github/workflows/build-deskktop-pr.yml rename to .github/workflows/build-desktop-pr.yml diff --git a/.github/workflows/build-images.yml b/.github/workflows/build-images.yml index 68f1a1a3a1..42d2f966aa 100644 --- a/.github/workflows/build-images.yml +++ b/.github/workflows/build-images.yml @@ -77,6 +77,11 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - uses: igorjs/gh-actions-clean-workflow@v3 + with: + token: ${{ secrets.GITHUB_TOKEN }} + days_old: 14 + fake: if: ${{ github.repository_owner == 'Armbian' }} runs-on: small @@ -104,7 +109,7 @@ jobs: RELE=$(curl -ks https://api.github.com/repos/armbian/build/releases/latest ^| grep "browser_download_url" | grep -o -P '(?<=Armbian.).*(?=_)' | cut -d"_" -f1 | sort | uniq | head -1) SOUR=$(cat build/VERSION) - + # skip if version in git is the same as at release if [[ "$RELE" == "$SOUR" ]]; then echo ::set-output name=changes::$(echo 'true') @@ -346,10 +351,10 @@ jobs: with: fetch-depth: 1 ref: nightly - + - name: Make build list run: | - + sudo npm install --location=global json || true truncate README.me --size=0 || true echo "VERSION=$(cat VERSION)" >> $GITHUB_ENV @@ -376,7 +381,7 @@ jobs: done ) cat README.tmp - + - uses: ncipollo/release-action@v1 with: tag: "${{ env.VERSION }}" diff --git a/.github/workflows/build-kernel-pr.yml b/.github/workflows/build-kernel-pr.yml index 9771f7af25..c7dfee76ea 100644 --- a/.github/workflows/build-kernel-pr.yml +++ b/.github/workflows/build-kernel-pr.yml @@ -1,21 +1,23 @@ name: Build Kernels at PR # # Generates kernels at PR if their code, patches or config was changed in any way. Packages are uploaded as Github action build artefakts -# Build starts if review is requested or if PR is marked for review +# Build starts if label is set to "Ready" # on: workflow_dispatch: pull_request: - types: [review_requested, ready_for_review] - paths-ignore: - - .github/workflows + types: [opened,synchronize,reopened,ready_for_review,review_requested,labeled] + paths: + - 'config/kernel/**' + - 'config/sources/**' + - 'config/patch/**' jobs: Check: name: Checking - if: ${{ success() && github.repository_owner == 'Armbian' }} + if: ${{ github.repository_owner == 'Armbian' && contains( github.event.pull_request.labels.*.name, 'Ready :arrow_right:') }} uses: armbian/scripts/.github/workflows/check-for-changes.yml@master with: @@ -24,7 +26,7 @@ jobs: Build: needs: Check - if: ${{ success() && github.repository_owner == 'Armbian' }} + if: ${{ github.repository_owner == 'Armbian' && contains( github.event.pull_request.labels.*.name, 'Desktop :desktop_computer:') }} uses: armbian/scripts/.github/workflows/build-kernel.yml@master with: diff --git a/.github/workflows/build-u-boot.yml b/.github/workflows/build-u-boot.yml index 4e3997fdf0..a22071de56 100644 --- a/.github/workflows/build-u-boot.yml +++ b/.github/workflows/build-u-boot.yml @@ -13,6 +13,7 @@ on: options: - nightly - master + permissions: contents: read diff --git a/.github/workflows/bump-version.yml b/.github/workflows/bump-version.yml index c6d86924e4..8b478a9f7c 100644 --- a/.github/workflows/bump-version.yml +++ b/.github/workflows/bump-version.yml @@ -11,6 +11,7 @@ jobs: fake: permissions: contents: none + runs-on: small name: Source changes if: ${{ github.repository_owner == 'Armbian' }} diff --git a/.github/workflows/check-integrity.yml b/.github/workflows/check-integrity.yml index 88e3172aa1..72895d588e 100644 --- a/.github/workflows/check-integrity.yml +++ b/.github/workflows/check-integrity.yml @@ -1,4 +1,7 @@ name: Check images integrity +# +# Manually checks images integrity +# on: workflow_dispatch: @@ -7,6 +10,9 @@ jobs: Update: + permissions: + contents: none + name: Check images integrity runs-on: [fast, igor] if: ${{ github.repository_owner == 'Armbian' }} diff --git a/.github/workflows/cleanup.yml b/.github/workflows/cleanup.yml deleted file mode 100644 index a82f02ac8f..0000000000 --- a/.github/workflows/cleanup.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: Clean Workflow Logs - -on: - workflow_dispatch: - inputs: - days_old: - description: "The amount of days old to delete" - default: "7" - required: false - -jobs: - clean-logs: - if: ${{ github.repository_owner == 'Armbian' }} - runs-on: ubuntu-latest - steps: - - uses: igorjs/gh-actions-clean-workflow@v3 - with: - token: ${{ secrets.GITHUB_TOKEN }} - owner: ${{ github.repository_owner }} - repo: ${{ github.event.repository.name }} - days_old: ${{ github.event.inputs.days_old }} diff --git a/.github/workflows/maintain.yml b/.github/workflows/maintain.yml deleted file mode 100644 index a66780680d..0000000000 --- a/.github/workflows/maintain.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: Maintain Runners - -on: - workflow_dispatch: - -permissions: - contents: read - -jobs: - - fake: - permissions: - contents: none - runs-on: small - name: Source changes - if: ${{ github.repository_owner == 'Armbian' }} - steps: - - run: | - echo "not empty" > changes - - uses: actions/upload-artifact@v3 - with: - path: changes - name: changes - if-no-files-found: ignore - - Bump: - permissions: - contents: none - needs: [ fake ] - if: github.repository_owner == 'Armbian' - uses: armbian/scripts/.github/workflows/maintain-runners.yml@master - - with: - checking: true - - secrets: - KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} diff --git a/.github/workflows/rebase.yml b/.github/workflows/rebase.yml index a46c7b361b..03313ad675 100644 --- a/.github/workflows/rebase.yml +++ b/.github/workflows/rebase.yml @@ -13,6 +13,7 @@ jobs: permissions: contents: write # for cirrus-actions/rebase to push code to rebase pull-requests: read # for cirrus-actions/rebase to get info about PR + name: Rebase if: github.event.issue.pull_request != '' && contains(github.event.comment.body, '/rebase') runs-on: ubuntu-latest diff --git a/.github/workflows/smoke-tests.yml b/.github/workflows/smoke-tests.yml index 5725c2059c..11039d8815 100644 --- a/.github/workflows/smoke-tests.yml +++ b/.github/workflows/smoke-tests.yml @@ -14,6 +14,7 @@ jobs: Smoke: permissions: contents: none + if: ${{ github.repository_owner == 'Armbian' }} uses: armbian/scripts/.github/workflows/smoke-tests.yml@master secrets: diff --git a/.github/workflows/update-cache.yml b/.github/workflows/update-cache.yml deleted file mode 100644 index 3fb2b89515..0000000000 --- a/.github/workflows/update-cache.yml +++ /dev/null @@ -1,410 +0,0 @@ -name: Build Rootfs Cache -# -# Generates rootfs cache and uploads it to: -# -# https://github.com/armbian/mirror/releases/tag/rootfs -# https://cache.armbian.com/rootfs/ -# - -on: - schedule: - - cron: "30 0 15 * *" # Runs at 00:30 UTC on the 15st of every month. - - push: - branches: - - 'master' - paths: - - 'config/distributions/**' - - 'config/cli/**' - - 'config/desktop/**' - - workflow_dispatch: - -jobs: - - release-start: - permissions: - contents: none - name: Release start - runs-on: [X64] - outputs: - rootfscache_version: ${{ steps.env-vars.outputs.rootfscache_version }} - if: ${{ github.repository_owner == 'Armbian' }} - steps: - - # Synyching procedure expects this value - - run: | - echo "not empty" > changes - - - uses: actions/upload-artifact@v3 - with: - path: changes - name: changes - if-no-files-found: ignore - - - name: Checkout repository - uses: actions/checkout@v3 - with: - repository: armbian/build - path: build - clean: false - - - name: Remove current status - run: | - sudo mountpoint -q build/cache/rootfs.upload && sudo fusermount -u build/cache/rootfs.upload || true - sudo apt-get -y -qq install sshfs - sudo mkdir -p build/cache/rootfs.upload || true - - # locally mount via NFS - if [[ $(curl -s http://ifconfig.me) == "93.103.15.56" ]]; then - sudo mount nas:/tank/armbian/users.armbian.com/upload/rootfs build/cache/rootfs.upload - else - sudo sshfs upload@users.armbian.com:/rootfs build/cache/rootfs.upload -o IdentityFile=~/.ssh/id_rsa -o reconnect -o allow_other || true - fi - # remove true in sshfs when all runners are on jammy - - sudo rm build/cache/rootfs.upload/* || true - sudo mountpoint -q build/cache/rootfs.upload && sudo fusermount -u build/cache/rootfs.upload || true - - - id: env-vars - name: Read current version - run: | - - ROOTFSCACHE_VERSION=$(wget --tries=10 -O - -o /dev/null https://github.com/armbian/mirror/releases/download/rootfs/rootfscache.version || true) - ROOTFSCACHE_VERSION=$(( ${ROOTFSCACHE_VERSION:-"0"} + 1 )) - echo "${ROOTFSCACHE_VERSION}" - echo "$ROOTFSCACHE_VERSION" | sudo tee rootfscache.version - echo ::set-output name=rootfscache_version::$(echo ${ROOTFSCACHE_VERSION}) || true - - - uses: dev-drprasad/delete-tag-and-release@v0.2.0 - if: ${{ github.repository_owner == 'Armbian' }} - with: - delete_release: true - repo: 'armbian/mirror' - tag_name: "rootfs" - env: - GITHUB_TOKEN: ${{ secrets.CR_PAT }} - - - name: Updating releases - uses: ncipollo/release-action@v1.10.0 - with: - artifacts: "rootfscache.version" - repo: "mirror" - tag: "rootfs" - name: "Build in progress" - bodyFile: "build/.github/Releases-wip.md" - allowUpdates: true - removeArtifacts: true - token: ${{ secrets.CR_PAT }} - - x86-min: - needs: [release-start] - permissions: - contents: none - uses: armbian/scripts/.github/workflows/build-cache-v2.yml@master - - with: - - variant: 'minimal:uefi-x86' - rootfscache_version: ${{ needs.release-start.outputs.rootfscache_version }} - - secrets: - PAT1: ${{ secrets.CR_PAT }} - GPG_KEY1: ${{ secrets.GPG_KEY1 }} - GPG_PASSPHRASE1: ${{ secrets.GPG_PASSPHRASE1 }} - GPG_KEY2: ${{ secrets.GPG_KEY2 }} - GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} - SCRIPTS_ACCESS_TOKEN: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} - SSH_KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} - - x86-srv: - needs: [release-start] - permissions: - contents: none - uses: armbian/scripts/.github/workflows/build-cache-v2.yml@master - - with: - - variant: 'server:uefi-x86' - rootfscache_version: ${{ needs.release-start.outputs.rootfscache_version }} - - secrets: - PAT1: ${{ secrets.CR_PAT }} - GPG_KEY1: ${{ secrets.GPG_KEY1 }} - GPG_PASSPHRASE1: ${{ secrets.GPG_PASSPHRASE1 }} - GPG_KEY2: ${{ secrets.GPG_KEY2 }} - GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} - SCRIPTS_ACCESS_TOKEN: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} - SSH_KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} - - x86-x: - needs: [release-start] - permissions: - contents: none - uses: armbian/scripts/.github/workflows/build-cache-v2.yml@master - - with: - - variant: 'desktop:uefi-x86' - rootfscache_version: ${{ needs.release-start.outputs.rootfscache_version }} - - secrets: - PAT1: ${{ secrets.CR_PAT }} - GPG_KEY1: ${{ secrets.GPG_KEY1 }} - GPG_PASSPHRASE1: ${{ secrets.GPG_PASSPHRASE1 }} - GPG_KEY2: ${{ secrets.GPG_KEY2 }} - GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} - SCRIPTS_ACCESS_TOKEN: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} - SSH_KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} - - armhf-min: - needs: [release-start] - permissions: - contents: none - uses: armbian/scripts/.github/workflows/build-cache-v2.yml@master - - with: - - variant: 'minimal:tinkerboard' - rootfscache_version: ${{ needs.release-start.outputs.rootfscache_version }} - - secrets: - PAT1: ${{ secrets.CR_PAT }} - GPG_KEY1: ${{ secrets.GPG_KEY1 }} - GPG_PASSPHRASE1: ${{ secrets.GPG_PASSPHRASE1 }} - GPG_KEY2: ${{ secrets.GPG_KEY2 }} - GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} - SCRIPTS_ACCESS_TOKEN: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} - SSH_KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} - - - armhf-srv: - needs: [release-start] - permissions: - contents: none - uses: armbian/scripts/.github/workflows/build-cache-v2.yml@master - - with: - - variant: 'server:tinkerboard' - rootfscache_version: ${{ needs.release-start.outputs.rootfscache_version }} - - secrets: - PAT1: ${{ secrets.CR_PAT }} - GPG_KEY1: ${{ secrets.GPG_KEY1 }} - GPG_PASSPHRASE1: ${{ secrets.GPG_PASSPHRASE1 }} - GPG_KEY2: ${{ secrets.GPG_KEY2 }} - GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} - SCRIPTS_ACCESS_TOKEN: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} - SSH_KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} - - armhf-x: - needs: [release-start] - permissions: - contents: none - uses: armbian/scripts/.github/workflows/build-cache-v2.yml@master - - with: - variant: 'desktop:tinkerboard' - rootfscache_version: ${{ needs.release-start.outputs.rootfscache_version }} - - secrets: - PAT1: ${{ secrets.CR_PAT }} - GPG_KEY1: ${{ secrets.GPG_KEY1 }} - GPG_PASSPHRASE1: ${{ secrets.GPG_PASSPHRASE1 }} - GPG_KEY2: ${{ secrets.GPG_KEY2 }} - GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} - SCRIPTS_ACCESS_TOKEN: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} - SSH_KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} - - arm64-min: - needs: [release-start] - permissions: - contents: none - uses: armbian/scripts/.github/workflows/build-cache-v2.yml@master - - with: - - variant: 'minimal:uefi-arm64' - rootfscache_version: ${{ needs.release-start.outputs.rootfscache_version }} - - secrets: - PAT1: ${{ secrets.CR_PAT }} - GPG_KEY1: ${{ secrets.GPG_KEY1 }} - GPG_PASSPHRASE1: ${{ secrets.GPG_PASSPHRASE1 }} - GPG_KEY2: ${{ secrets.GPG_KEY2 }} - GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} - SCRIPTS_ACCESS_TOKEN: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} - SSH_KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} - - arm64-srv: - needs: [release-start] - permissions: - contents: none - uses: armbian/scripts/.github/workflows/build-cache-v2.yml@master - - with: - - variant: 'server:uefi-arm64' - rootfscache_version: ${{ needs.release-start.outputs.rootfscache_version }} - - secrets: - PAT1: ${{ secrets.CR_PAT }} - GPG_KEY1: ${{ secrets.GPG_KEY1 }} - GPG_PASSPHRASE1: ${{ secrets.GPG_PASSPHRASE1 }} - GPG_KEY2: ${{ secrets.GPG_KEY2 }} - GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} - SCRIPTS_ACCESS_TOKEN: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} - SSH_KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} - - arm64-x: - needs: [release-start] - permissions: - contents: none - uses: armbian/scripts/.github/workflows/build-cache-v2.yml@master - - with: - variant: 'desktop:uefi-arm64' - rootfscache_version: ${{ needs.release-start.outputs.rootfscache_version }} - - secrets: - PAT1: ${{ secrets.CR_PAT }} - GPG_KEY1: ${{ secrets.GPG_KEY1 }} - GPG_PASSPHRASE1: ${{ secrets.GPG_PASSPHRASE1 }} - GPG_KEY2: ${{ secrets.GPG_KEY2 }} - GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} - SCRIPTS_ACCESS_TOKEN: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} - SSH_KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} - - jobsend: - permissions: - contents: none - name: Release finish - needs: [x86-min,x86-srv,x86-x,armhf-min,armhf-srv,armhf-x,arm64-min,arm64-srv,arm64-x] - runs-on: [fast] - if: ${{ github.repository_owner == 'Armbian' }} - steps: - - - name: Runner cleanup - uses: igorpecovnik/freespace@main - - - name: Checkout repository - uses: actions/checkout@v3 - with: - repository: armbian/build - path: build - clean: false - - - name: Checkout tracker lists - uses: actions/checkout@v3 - with: - fetch-depth: '1' - repository: ngosang/trackerslist - path: trackerslist - clean: false - - - name: Import GPG key - uses: crazy-max/ghaction-import-gpg@v5 - with: - gpg_private_key: ${{ secrets.GPG_KEY1 }} - passphrase: ${{ secrets.GPG_PASSPHRASE1 }} - workdir: build - git_user_signingkey: true - - - name: Install SSH key for storage - uses: shimataro/ssh-key-action@v2 - with: - - key: ${{ secrets.KEY_TORRENTS }} - known_hosts: ${{ secrets.KNOWN_HOSTS_UPLOAD }} - if_key_exists: replace - - - name: Mount upload folders - run: | - - sudo mountpoint -q build/cache/rootfs.upload && sudo fusermount -u build/cache/rootfs.upload || true - sudo apt-get -y -qq install sshfs - sudo mkdir -p build/cache/rootfs.upload || true - if [[ $(curl -s http://ifconfig.me) == "93.103.15.56" ]]; then - sudo mount nas:/tank/armbian/users.armbian.com/upload/rootfs build/cache/rootfs.upload - else - sudo sshfs upload@users.armbian.com:/rootfs build/cache/rootfs.upload -o IdentityFile=~/.ssh/id_rsa -o reconnect -o allow_other || true - fi - # remove true in sshfs when all runners are on jammy - sudo df - - - name: Signing - run: | - - sudo apt-get -y -qq install parallel buildtorrent - - ANNOUNCE=$(cat trackerslist/trackers_best_ip.txt | sed '/^$/d' | shuf -n 1) - TRACKERS=$(cat trackerslist/trackers_all.txt | sed '/^\s*$/d' | while read line; do printf ",""${line}"; done | cut -c 2-) - WEBSEEDS="--webseeds="https://github.com/armbian/mirror/releases/download/rootfs/\$FILE,"$(curl -s https://cache.armbian.com/mirrors | jq -r '.'default' | .[] | values' | sed -e 's/$/rootfs\/$FILE/' | tr '\n' , | sed 's/.$//')" - cd build/cache/rootfs.upload - - FILES=$(ls -1 *.lz4) - for FILE in ${FILES[@]} - do - if [[ ! -f $FILE.asc ]]; then - echo "$FILE" - fi - done | sudo --preserve-env parallel --jobs 18 ' - echo "Signing {} "; echo ${{ secrets.GPG_PASSPHRASE1 }} | gpg --quiet --armor --batch --yes --passphrase-fd 0 --detach-sign --pinentry-mode loopback {}; - echo "Generating {}.torrent "; buildtorrent -q -s -m '$WEBSEEDS' --announce="'$ANNOUNCE'" --announcelist="'$TRACKERS'" {} -c "Armbian rootfs cache" {}.torrent >/dev/null - ' - - # Update version - echo "${{ needs.release-start.outputs.rootfscache_version }}" | sudo tee rootfscache.version - - - name: Upload - uses: ncipollo/release-action@v1 - if: ${{ github.repository_owner == 'Armbian' }} - with: - repo: "mirror" - artifacts: "build/cache/rootfs.upload/*.torrent,build/cache/rootfs.upload/*.asc" - tag: "rootfs" - bodyFile: "build/.github/Releases.md" - name: "Rootfs cache" - allowUpdates: true - token: ${{ secrets.CR_PAT }} - - - name: Delete obsolete - run: | - - BRISI=($(diff <(find build/cache/rootfs.upload -name "*.lz4.current" | sed "s/.current//" | sort) <(find build/cache/rootfs.upload -name "*.lz4" | sort) | grep ">" | sed "s/> //")) - for brisi in "${BRISI[@]}"; do - sudo rm $brisi.* - done - - - name: Unmount folders - run: | - - sudo mountpoint -q build/cache/rootfs && sudo fusermount -u build/cache/rootfs || true - sudo mountpoint -q build/cache/rootfs.upload && sudo fusermount -u build/cache/rootfs.upload || true - - final-sync: - permissions: - contents: none - name: "Sync servers" - needs: [jobsend] - if: ${{ success() && github.repository_owner == 'Armbian' }} - uses: armbian/scripts/.github/workflows/sync-servers.yml@master - - with: - KEY_ID: 'upload' - - secrets: - KEY_UPLOAD: ${{ secrets.KEY_UPLOAD }} - USER_REPOSITORY: ${{ secrets.USER_REPOSITORY }} - HOST_REPOSITORY: ${{ secrets.HOST_REPOSITORY }} - KNOWN_HOSTS_REPOSITORY: ${{ secrets.KNOWN_HOSTS_REPOSITORY }} diff --git a/.github/workflows/update-docker.yml b/.github/workflows/update-docker.yml index fcad685454..579e710bc7 100644 --- a/.github/workflows/update-docker.yml +++ b/.github/workflows/update-docker.yml @@ -16,6 +16,7 @@ jobs: Docker: permissions: contents: none + if: ${{ github.repository_owner == 'Armbian' }} uses: armbian/scripts/.github/workflows/update-docker-image.yml@master @@ -25,6 +26,7 @@ jobs: Docker-test: permissions: contents: none + needs: Docker if: ${{ github.repository_owner == 'Armbian' }} uses: armbian/scripts/.github/workflows/build-test-image-docker.yml@master