mirror of
https://github.com/LizardByte/Sunshine.git
synced 2025-10-29 19:36:06 +00:00
chore: update global workflows (#3907)
This commit is contained in:
parent
7017b8e88c
commit
a212a542a0
1
.flake8
1
.flake8
@ -3,4 +3,5 @@ filename =
|
|||||||
*.py
|
*.py
|
||||||
max-line-length = 120
|
max-line-length = 120
|
||||||
extend-exclude =
|
extend-exclude =
|
||||||
|
.venv/
|
||||||
venv/
|
venv/
|
||||||
|
|||||||
49
.github/label-actions.yml
vendored
49
.github/label-actions.yml
vendored
@ -1,49 +0,0 @@
|
|||||||
---
|
|
||||||
# This file is centrally managed in https://github.com/<organization>/.github/
|
|
||||||
# Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in
|
|
||||||
# the above-mentioned repo.
|
|
||||||
|
|
||||||
# Configuration for Label Actions - https://github.com/dessant/label-actions
|
|
||||||
|
|
||||||
added:
|
|
||||||
comment: >
|
|
||||||
This feature has been added and will be available in the next release.
|
|
||||||
fixed:
|
|
||||||
comment: >
|
|
||||||
This issue has been fixed and will be available in the next release.
|
|
||||||
invalid:duplicate:
|
|
||||||
comment: >
|
|
||||||
:wave: @{issue-author}, this appears to be a duplicate of a pre-existing issue.
|
|
||||||
close: true
|
|
||||||
lock: true
|
|
||||||
unlabel: 'status:awaiting-triage'
|
|
||||||
|
|
||||||
-invalid:duplicate:
|
|
||||||
reopen: true
|
|
||||||
unlock: true
|
|
||||||
|
|
||||||
invalid:support:
|
|
||||||
comment: >
|
|
||||||
:wave: @{issue-author}, we use the issue tracker exclusively for bug reports.
|
|
||||||
However, this issue appears to be a support request. Please use our
|
|
||||||
[Support Center](https://app.lizardbyte.dev/support) for support issues. Thanks.
|
|
||||||
close: true
|
|
||||||
lock: true
|
|
||||||
lock-reason: 'off-topic'
|
|
||||||
unlabel: 'status:awaiting-triage'
|
|
||||||
|
|
||||||
-invalid:support:
|
|
||||||
reopen: true
|
|
||||||
unlock: true
|
|
||||||
|
|
||||||
invalid:template-incomplete:
|
|
||||||
issues:
|
|
||||||
comment: >
|
|
||||||
:wave: @{issue-author}, please edit your issue to complete the template with
|
|
||||||
all the required info. Your issue will be automatically closed in 5 days if
|
|
||||||
the template is not completed. Thanks.
|
|
||||||
prs:
|
|
||||||
comment: >
|
|
||||||
:wave: @{issue-author}, please edit your PR to complete the template with
|
|
||||||
all the required info. Your PR will be automatically closed in 5 days if
|
|
||||||
the template is not completed. Thanks.
|
|
||||||
1
.github/semantic.yml
vendored
1
.github/semantic.yml
vendored
@ -12,3 +12,4 @@ titleAndCommits: false
|
|||||||
anyCommit: false
|
anyCommit: false
|
||||||
allowMergeCommits: false
|
allowMergeCommits: false
|
||||||
allowRevertCommits: false
|
allowRevertCommits: false
|
||||||
|
targetUrl: https://docs.lizardbyte.dev/latest/developers/contributing.html#creating-a-pull-request
|
||||||
|
|||||||
30
.github/workflows/_codeql.yml
vendored
Normal file
30
.github/workflows/_codeql.yml
vendored
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
---
|
||||||
|
# This workflow is centrally managed in https://github.com/LizardByte/.github/
|
||||||
|
# Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in
|
||||||
|
# the above-mentioned repo.
|
||||||
|
|
||||||
|
name: CodeQL
|
||||||
|
permissions:
|
||||||
|
actions: read
|
||||||
|
contents: read
|
||||||
|
security-events: write
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
schedule:
|
||||||
|
- cron: '00 12 * * 0' # every Sunday at 12:00 UTC
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: "${{ github.workflow }}-${{ github.ref }}"
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
call-codeql:
|
||||||
|
name: CodeQL
|
||||||
|
uses: LizardByte/.github/.github/workflows/__call-codeql.yml@master
|
||||||
|
if: ${{ github.repository != 'LizardByte/.github' }}
|
||||||
27
.github/workflows/_common-lint.yml
vendored
Normal file
27
.github/workflows/_common-lint.yml
vendored
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
---
|
||||||
|
# This workflow is centrally managed in https://github.com/LizardByte/.github/
|
||||||
|
# Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in
|
||||||
|
# the above-mentioned repo.
|
||||||
|
|
||||||
|
name: common lint
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
types:
|
||||||
|
- opened
|
||||||
|
- synchronize
|
||||||
|
- reopened
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: "${{ github.workflow }}-${{ github.ref }}"
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
lint:
|
||||||
|
name: Common Lint
|
||||||
|
uses: LizardByte/.github/.github/workflows/__call-common-lint.yml@master
|
||||||
|
if: ${{ github.repository != 'LizardByte/.github' }}
|
||||||
39
.github/workflows/_docker.yml
vendored
Normal file
39
.github/workflows/_docker.yml
vendored
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
---
|
||||||
|
# This workflow is centrally managed in https://github.com/LizardByte/.github/
|
||||||
|
# Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in
|
||||||
|
# the above-mentioned repo.
|
||||||
|
|
||||||
|
name: Docker
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
packages: write
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
types:
|
||||||
|
- opened
|
||||||
|
- synchronize
|
||||||
|
- reopened
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: "${{ github.workflow }}-${{ github.ref }}"
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
call-docker:
|
||||||
|
name: Docker
|
||||||
|
uses: LizardByte/.github/.github/workflows/__call-docker.yml@master
|
||||||
|
if: ${{ github.repository != 'LizardByte/.github' }}
|
||||||
|
secrets:
|
||||||
|
DOCKER_HUB_USERNAME: ${{ secrets.DOCKER_HUB_USERNAME }}
|
||||||
|
DOCKER_HUB_PASSWORD: ${{ secrets.DOCKER_HUB_PASSWORD }}
|
||||||
|
DOCKER_HUB_ACCESS_TOKEN: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
|
||||||
|
GH_BOT_NAME: ${{ secrets.GH_BOT_NAME }}
|
||||||
|
GH_BOT_TOKEN: ${{ secrets.GH_BOT_TOKEN }}
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
23
.github/workflows/_release-notifier.yml
vendored
Normal file
23
.github/workflows/_release-notifier.yml
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
# This workflow is centrally managed in https://github.com/LizardByte/.github/
|
||||||
|
# Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in
|
||||||
|
# the above-mentioned repo.
|
||||||
|
|
||||||
|
# Create a blog post for a new release and open a PR to the blog repo
|
||||||
|
|
||||||
|
name: Release Notifications
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
on:
|
||||||
|
release:
|
||||||
|
types:
|
||||||
|
- released # this triggers when a release is published, but does not include pre-releases or drafts
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
update-blog:
|
||||||
|
name: Update blog
|
||||||
|
uses: LizardByte/.github/.github/workflows/__call-release-notifier.yml@master
|
||||||
|
if: github.repository_owner == 'LizardByte'
|
||||||
|
secrets:
|
||||||
|
GH_TOKEN: ${{ secrets.GH_BOT_TOKEN }}
|
||||||
@ -1,10 +1,8 @@
|
|||||||
---
|
---
|
||||||
# This workflow is centrally managed in https://github.com/<organization>/.github/
|
# This workflow is centrally managed in https://github.com/LizardByte/.github/
|
||||||
# Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in
|
# Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in
|
||||||
# the above-mentioned repo.
|
# the above-mentioned repo.
|
||||||
|
|
||||||
# Update changelog on release events.
|
|
||||||
|
|
||||||
name: Update changelog
|
name: Update changelog
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
@ -24,14 +22,10 @@ concurrency:
|
|||||||
jobs:
|
jobs:
|
||||||
update-changelog:
|
update-changelog:
|
||||||
name: Update Changelog
|
name: Update Changelog
|
||||||
|
uses: LizardByte/.github/.github/workflows/__call-update-changelog.yml@master
|
||||||
if: >-
|
if: >-
|
||||||
github.event_name == 'workflow_dispatch' ||
|
github.repository_owner == 'LizardByte' &&
|
||||||
(!github.event.release.prerelease && !github.event.release.draft)
|
(github.event_name == 'workflow_dispatch' ||
|
||||||
runs-on: ubuntu-latest
|
(!github.event.release.prerelease && !github.event.release.draft))
|
||||||
steps:
|
secrets:
|
||||||
- name: Update Changelog
|
GH_TOKEN: ${{ secrets.GH_BOT_TOKEN }}
|
||||||
uses: LizardByte/update-changelog-action@v2025.426.173858
|
|
||||||
with:
|
|
||||||
changelogBranch: changelog
|
|
||||||
changelogFile: CHANGELOG.md
|
|
||||||
token: ${{ secrets.GH_BOT_TOKEN }}
|
|
||||||
34
.github/workflows/_update-docs.yml
vendored
Normal file
34
.github/workflows/_update-docs.yml
vendored
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
---
|
||||||
|
# This workflow is centrally managed in https://github.com/LizardByte/.github/
|
||||||
|
# Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in
|
||||||
|
# the above-mentioned repo.
|
||||||
|
|
||||||
|
# To use, add the `rtd` repository label to identify repositories that should trigger this workflow.
|
||||||
|
# If the project slug is not the repository name, add a repository variable named `READTHEDOCS_SLUG` with the value of
|
||||||
|
# the ReadTheDocs project slug.
|
||||||
|
|
||||||
|
# Update readthedocs on release events.
|
||||||
|
|
||||||
|
name: Update docs
|
||||||
|
permissions: {}
|
||||||
|
|
||||||
|
on:
|
||||||
|
release:
|
||||||
|
types:
|
||||||
|
- created
|
||||||
|
- edited
|
||||||
|
- deleted
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: "${{ github.workflow }}-${{ github.event.release.tag_name }}"
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
update-docs:
|
||||||
|
name: Update docs
|
||||||
|
uses: LizardByte/.github/.github/workflows/__call-update-docs.yml@master
|
||||||
|
if: github.repository_owner == 'LizardByte'
|
||||||
|
with:
|
||||||
|
readthedocs_slug: ${{ vars.READTHEDOCS_SLUG }}
|
||||||
|
secrets:
|
||||||
|
READTHEDOCS_TOKEN: ${{ secrets.READTHEDOCS_TOKEN }}
|
||||||
29
.github/workflows/_update-flathub-repo.yml
vendored
Normal file
29
.github/workflows/_update-flathub-repo.yml
vendored
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
---
|
||||||
|
# This workflow is centrally managed in https://github.com/LizardByte/.github/
|
||||||
|
# Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in
|
||||||
|
# the above-mentioned repo.
|
||||||
|
|
||||||
|
# To use, add the `flathub-pkg` repository label to identify repositories that should trigger this workflow.
|
||||||
|
|
||||||
|
# Update Flathub on release events.
|
||||||
|
|
||||||
|
name: Update Flathub repo
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
on:
|
||||||
|
release:
|
||||||
|
types:
|
||||||
|
- released
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: "${{ github.workflow }}-${{ github.event.release.tag_name }}"
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
update-flathub-repo:
|
||||||
|
name: Update Flathub Repo
|
||||||
|
uses: LizardByte/.github/.github/workflows/__call-update-flathub-repo.yml@master
|
||||||
|
if: github.repository_owner == 'LizardByte'
|
||||||
|
secrets:
|
||||||
|
GH_TOKEN: ${{ secrets.GH_BOT_TOKEN }}
|
||||||
31
.github/workflows/_update-homebrew-repo.yml
vendored
Normal file
31
.github/workflows/_update-homebrew-repo.yml
vendored
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
---
|
||||||
|
# This workflow is centrally managed in https://github.com/LizardByte/.github/
|
||||||
|
# Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in
|
||||||
|
# the above-mentioned repo.
|
||||||
|
|
||||||
|
# To use, add the `homebrew-pkg` repository label to identify repositories that should trigger this workflow.
|
||||||
|
|
||||||
|
# Update Homebrew on release events.
|
||||||
|
|
||||||
|
name: Update Homebrew repo
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
on:
|
||||||
|
release:
|
||||||
|
types:
|
||||||
|
- released
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: "${{ github.workflow }}-${{ github.event.release.tag_name }}"
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
update-homebrew-repo:
|
||||||
|
name: Update Homebrew repo
|
||||||
|
uses: LizardByte/.github/.github/workflows/__call-update-homebrew-repo.yml@master
|
||||||
|
if: github.repository_owner == 'LizardByte'
|
||||||
|
secrets:
|
||||||
|
GH_EMAIL: ${{ secrets.GH_BOT_EMAIL }}
|
||||||
|
GH_USERNAME: ${{ secrets.GH_BOT_NAME }}
|
||||||
|
GH_TOKEN: ${{ secrets.GH_BOT_TOKEN }}
|
||||||
29
.github/workflows/_update-pacman-repo.yml
vendored
Normal file
29
.github/workflows/_update-pacman-repo.yml
vendored
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
---
|
||||||
|
# This workflow is centrally managed in https://github.com/LizardByte/.github/
|
||||||
|
# Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in
|
||||||
|
# the above-mentioned repo.
|
||||||
|
|
||||||
|
# To use, add the `pacman-pkg` repository label to identify repositories that should trigger this workflow.
|
||||||
|
|
||||||
|
# Update pacman repo on release events.
|
||||||
|
|
||||||
|
name: Update pacman repo
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
on:
|
||||||
|
release:
|
||||||
|
types:
|
||||||
|
- released
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: "${{ github.workflow }}-${{ github.event.release.tag_name }}"
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
update-homebrew-release:
|
||||||
|
name: Update pacman repo
|
||||||
|
uses: LizardByte/.github/.github/workflows/__call-update-pacman-repo.yml@master
|
||||||
|
if: github.repository_owner == 'LizardByte'
|
||||||
|
secrets:
|
||||||
|
GH_TOKEN: ${{ secrets.GH_BOT_TOKEN }}
|
||||||
29
.github/workflows/_update-winget-repo.yml
vendored
Normal file
29
.github/workflows/_update-winget-repo.yml
vendored
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
---
|
||||||
|
# This workflow is centrally managed in https://github.com/LizardByte/.github/
|
||||||
|
# Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in
|
||||||
|
# the above-mentioned repo.
|
||||||
|
|
||||||
|
# To use, add the `winget-pkg` repository label to identify repositories that should trigger this workflow.
|
||||||
|
|
||||||
|
# Update Winget on release events.
|
||||||
|
|
||||||
|
name: Update Winget repo
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
on:
|
||||||
|
release:
|
||||||
|
types:
|
||||||
|
- released
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: "${{ github.workflow }}-${{ github.event.release.tag_name }}"
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
update-winget-repo:
|
||||||
|
name: Update Winget repo
|
||||||
|
uses: LizardByte/.github/.github/workflows/__call-update-winget-repo.yml@master
|
||||||
|
if: github.repository_owner == 'LizardByte'
|
||||||
|
secrets:
|
||||||
|
GH_TOKEN: ${{ secrets.GH_BOT_TOKEN }}
|
||||||
380
.github/workflows/ci-docker.yml
vendored
380
.github/workflows/ci-docker.yml
vendored
@ -1,380 +0,0 @@
|
|||||||
---
|
|
||||||
# This workflow is centrally managed in https://github.com/<organization>/.github/
|
|
||||||
# Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in
|
|
||||||
# the above-mentioned repo.
|
|
||||||
|
|
||||||
# This workflow is intended to work with all our organization Docker projects. A readme named `DOCKER_README.md`
|
|
||||||
# will be used to update the description on Docker hub.
|
|
||||||
|
|
||||||
# custom comments in dockerfiles:
|
|
||||||
|
|
||||||
# `# platforms: `
|
|
||||||
# Comma separated list of platforms, i.e. `# platforms: linux/386,linux/amd64`. Docker platforms can alternatively
|
|
||||||
# be listed in a file named `.docker_platforms`.
|
|
||||||
# `# platforms_pr: `
|
|
||||||
# Comma separated list of platforms to run for PR events, i.e. `# platforms_pr: linux/amd64`. This will take
|
|
||||||
# precedence over the `# platforms: ` directive.
|
|
||||||
# `# artifacts: `
|
|
||||||
# `true` to build in two steps, stopping at `artifacts` build stage and extracting the image from there to the
|
|
||||||
# GitHub runner.
|
|
||||||
|
|
||||||
name: CI Docker
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
types:
|
|
||||||
- opened
|
|
||||||
- synchronize
|
|
||||||
- reopened
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: "${{ github.workflow }}-${{ github.ref }}"
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
check_dockerfiles:
|
|
||||||
name: Check Dockerfiles
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Find dockerfiles
|
|
||||||
id: find
|
|
||||||
run: |
|
|
||||||
dockerfiles=$(find . -type f -iname "Dockerfile" -o -iname "*.dockerfile")
|
|
||||||
|
|
||||||
echo "found dockerfiles: ${dockerfiles}"
|
|
||||||
|
|
||||||
# do not quote to keep this as a single line
|
|
||||||
echo dockerfiles=${dockerfiles} >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
MATRIX_COMBINATIONS=""
|
|
||||||
for FILE in ${dockerfiles}; do
|
|
||||||
# extract tag from file name
|
|
||||||
tag=$(echo $FILE | sed -r -z -e 's/(\.\/)*.*\/(Dockerfile)/None/gm')
|
|
||||||
if [[ $tag == "None" ]]; then
|
|
||||||
MATRIX_COMBINATIONS="$MATRIX_COMBINATIONS {\"dockerfile\": \"$FILE\"},"
|
|
||||||
else
|
|
||||||
tag=$(echo $FILE | sed -r -z -e 's/(\.\/)*.*\/(.+)(\.dockerfile)/-\2/gm')
|
|
||||||
MATRIX_COMBINATIONS="$MATRIX_COMBINATIONS {\"dockerfile\": \"$FILE\", \"tag\": \"$tag\"},"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
# removes the last character (i.e. comma)
|
|
||||||
MATRIX_COMBINATIONS=${MATRIX_COMBINATIONS::-1}
|
|
||||||
|
|
||||||
# setup matrix for later jobs
|
|
||||||
matrix=$((
|
|
||||||
echo "{ \"include\": [$MATRIX_COMBINATIONS] }"
|
|
||||||
) | jq -c .)
|
|
||||||
|
|
||||||
echo $matrix
|
|
||||||
echo $matrix | jq .
|
|
||||||
echo "matrix=$matrix" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Find dotnet solution file
|
|
||||||
id: find_dotnet
|
|
||||||
run: |
|
|
||||||
solution=$(find . -maxdepth 1 -type f -iname "*.sln")
|
|
||||||
|
|
||||||
echo "found solution: ${solution}"
|
|
||||||
|
|
||||||
# do not quote to keep this as a single line
|
|
||||||
echo solution=${solution} >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
if [[ $solution != "" ]]; then
|
|
||||||
echo "dotnet=true" >> $GITHUB_OUTPUT
|
|
||||||
else
|
|
||||||
echo "dotnet=false" >> $GITHUB_OUTPUT
|
|
||||||
fi
|
|
||||||
|
|
||||||
outputs:
|
|
||||||
dockerfiles: ${{ steps.find.outputs.dockerfiles }}
|
|
||||||
matrix: ${{ steps.find.outputs.matrix }}
|
|
||||||
dotnet: ${{ steps.find_dotnet.outputs.dotnet }}
|
|
||||||
solution: ${{ steps.find_dotnet.outputs.solution }}
|
|
||||||
|
|
||||||
setup_release:
|
|
||||||
name: Setup Release
|
|
||||||
if: needs.check_dockerfiles.outputs.dockerfiles
|
|
||||||
needs: check_dockerfiles
|
|
||||||
outputs:
|
|
||||||
publish_release: ${{ steps.setup_release.outputs.publish_release }}
|
|
||||||
release_body: ${{ steps.setup_release.outputs.release_body }}
|
|
||||||
release_commit: ${{ steps.setup_release.outputs.release_commit }}
|
|
||||||
release_generate_release_notes: ${{ steps.setup_release.outputs.release_generate_release_notes }}
|
|
||||||
release_tag: ${{ steps.setup_release.outputs.release_tag }}
|
|
||||||
release_version: ${{ steps.setup_release.outputs.release_version }}
|
|
||||||
permissions:
|
|
||||||
contents: write # read does not work to check squash and merge details
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Setup Release
|
|
||||||
id: setup_release
|
|
||||||
uses: LizardByte/setup-release-action@v2025.426.225
|
|
||||||
with:
|
|
||||||
dotnet: ${{ needs.check_dockerfiles.outputs.dotnet }}
|
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
docker:
|
|
||||||
name: Docker${{ matrix.tag }}
|
|
||||||
if: needs.check_dockerfiles.outputs.dockerfiles
|
|
||||||
needs:
|
|
||||||
- check_dockerfiles
|
|
||||||
- setup_release
|
|
||||||
permissions:
|
|
||||||
packages: write
|
|
||||||
contents: write
|
|
||||||
runs-on: ubuntu-22.04
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix: ${{ fromJson(needs.check_dockerfiles.outputs.matrix) }}
|
|
||||||
steps:
|
|
||||||
- name: Maximize build space
|
|
||||||
uses: easimon/maximize-build-space@v10
|
|
||||||
with:
|
|
||||||
root-reserve-mb: 30720 # https://github.com/easimon/maximize-build-space#caveats
|
|
||||||
remove-dotnet: 'true'
|
|
||||||
remove-android: 'true'
|
|
||||||
remove-haskell: 'true'
|
|
||||||
remove-codeql: 'true'
|
|
||||||
remove-docker-images: 'true'
|
|
||||||
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: recursive
|
|
||||||
|
|
||||||
- name: Prepare
|
|
||||||
id: prepare
|
|
||||||
env:
|
|
||||||
NV: ${{ needs.setup_release.outputs.release_tag }}
|
|
||||||
run: |
|
|
||||||
# get branch name
|
|
||||||
BRANCH=${GITHUB_HEAD_REF}
|
|
||||||
|
|
||||||
RELEASE=${{ needs.setup_release.outputs.publish_release }}
|
|
||||||
COMMIT=${{ needs.setup_release.outputs.release_commit }}
|
|
||||||
|
|
||||||
if [ -z "$BRANCH" ]; then
|
|
||||||
echo "This is a PUSH event"
|
|
||||||
BRANCH=${{ github.ref_name }}
|
|
||||||
CLONE_URL=${{ github.event.repository.clone_url }}
|
|
||||||
else
|
|
||||||
echo "This is a PULL REQUEST event"
|
|
||||||
CLONE_URL=${{ github.event.pull_request.head.repo.clone_url }}
|
|
||||||
fi
|
|
||||||
|
|
||||||
# determine to push image to dockerhub and ghcr or not
|
|
||||||
if [[ $GITHUB_EVENT_NAME == "push" ]]; then
|
|
||||||
PUSH=true
|
|
||||||
else
|
|
||||||
PUSH=false
|
|
||||||
fi
|
|
||||||
|
|
||||||
# setup the tags
|
|
||||||
REPOSITORY=${{ github.repository }}
|
|
||||||
BASE_TAG=$(echo $REPOSITORY | tr '[:upper:]' '[:lower:]')
|
|
||||||
|
|
||||||
TAGS="${BASE_TAG}:${COMMIT:0:7}${{ matrix.tag }},ghcr.io/${BASE_TAG}:${COMMIT:0:7}${{ matrix.tag }}"
|
|
||||||
|
|
||||||
if [[ $GITHUB_REF == refs/heads/master ]]; then
|
|
||||||
TAGS="${TAGS},${BASE_TAG}:latest${{ matrix.tag }},ghcr.io/${BASE_TAG}:latest${{ matrix.tag }}"
|
|
||||||
TAGS="${TAGS},${BASE_TAG}:master${{ matrix.tag }},ghcr.io/${BASE_TAG}:master${{ matrix.tag }}"
|
|
||||||
else
|
|
||||||
TAGS="${TAGS},${BASE_TAG}:test${{ matrix.tag }},ghcr.io/${BASE_TAG}:test${{ matrix.tag }}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ${NV} != "" ]]; then
|
|
||||||
TAGS="${TAGS},${BASE_TAG}:${NV}${{ matrix.tag }},ghcr.io/${BASE_TAG}:${NV}${{ matrix.tag }}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# parse custom directives out of dockerfile
|
|
||||||
# try to get the platforms from the dockerfile custom directive, i.e. `# platforms: xxx,yyy`
|
|
||||||
# directives for PR event, i.e. not push event
|
|
||||||
if [[ ${RELEASE} == "false" ]]; then
|
|
||||||
while read -r line; do
|
|
||||||
if [[ $line == "# platforms_pr: "* && $PLATFORMS == "" ]]; then
|
|
||||||
# echo the line and use `sed` to remove the custom directive
|
|
||||||
PLATFORMS=$(echo -e "$line" | sed 's/# platforms_pr: //')
|
|
||||||
elif [[ $PLATFORMS != "" ]]; then
|
|
||||||
# break while loop once all custom "PR" event directives are found
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done <"${{ matrix.dockerfile }}"
|
|
||||||
fi
|
|
||||||
# directives for all events... above directives will not be parsed if they were already found
|
|
||||||
while read -r line; do
|
|
||||||
if [[ $line == "# platforms: "* && $PLATFORMS == "" ]]; then
|
|
||||||
# echo the line and use `sed` to remove the custom directive
|
|
||||||
PLATFORMS=$(echo -e "$line" | sed 's/# platforms: //')
|
|
||||||
elif [[ $line == "# artifacts: "* && $ARTIFACTS == "" ]]; then
|
|
||||||
# echo the line and use `sed` to remove the custom directive
|
|
||||||
ARTIFACTS=$(echo -e "$line" | sed 's/# artifacts: //')
|
|
||||||
elif [[ $line == "# no-cache-filters: "* && $NO_CACHE_FILTERS == "" ]]; then
|
|
||||||
# echo the line and use `sed` to remove the custom directive
|
|
||||||
NO_CACHE_FILTERS=$(echo -e "$line" | sed 's/# no-cache-filters: //')
|
|
||||||
elif [[ $PLATFORMS != "" && $ARTIFACTS != "" && $NO_CACHE_FILTERS != "" ]]; then
|
|
||||||
# break while loop once all custom directives are found
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done <"${{ matrix.dockerfile }}"
|
|
||||||
# if PLATFORMS is blank, fall back to the legacy method of reading from the `.docker_platforms` file
|
|
||||||
if [[ $PLATFORMS == "" ]]; then
|
|
||||||
# read the platforms from `.docker_platforms`
|
|
||||||
PLATFORMS=$(<.docker_platforms)
|
|
||||||
fi
|
|
||||||
# if PLATFORMS is still blank, fall back to `linux/amd64`
|
|
||||||
if [[ $PLATFORMS == "" ]]; then
|
|
||||||
PLATFORMS="linux/amd64"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "branch=${BRANCH}" >> $GITHUB_OUTPUT
|
|
||||||
echo "build_date=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_OUTPUT
|
|
||||||
echo "clone_url=${CLONE_URL}" >> $GITHUB_OUTPUT
|
|
||||||
echo "artifacts=${ARTIFACTS}" >> $GITHUB_OUTPUT
|
|
||||||
echo "no_cache_filters=${NO_CACHE_FILTERS}" >> $GITHUB_OUTPUT
|
|
||||||
echo "platforms=${PLATFORMS}" >> $GITHUB_OUTPUT
|
|
||||||
echo "tags=${TAGS}" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Set Up QEMU
|
|
||||||
uses: docker/setup-qemu-action@v3
|
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v3
|
|
||||||
id: buildx
|
|
||||||
|
|
||||||
- name: Cache Docker Layers
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: /tmp/.buildx-cache
|
|
||||||
key: Docker-buildx${{ matrix.tag }}-${{ github.sha }}
|
|
||||||
restore-keys: |
|
|
||||||
Docker-buildx${{ matrix.tag }}-
|
|
||||||
|
|
||||||
- name: Log in to Docker Hub
|
|
||||||
if: needs.setup_release.outputs.publish_release == 'true' # PRs do not have access to secrets
|
|
||||||
uses: docker/login-action@v3
|
|
||||||
with:
|
|
||||||
username: ${{ secrets.DOCKER_HUB_USERNAME }}
|
|
||||||
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
|
|
||||||
|
|
||||||
- name: Log in to the Container registry
|
|
||||||
if: needs.setup_release.outputs.publish_release == 'true' # PRs do not have access to secrets
|
|
||||||
uses: docker/login-action@v3
|
|
||||||
with:
|
|
||||||
registry: ghcr.io
|
|
||||||
username: ${{ secrets.GH_BOT_NAME }}
|
|
||||||
password: ${{ secrets.GH_BOT_TOKEN }}
|
|
||||||
|
|
||||||
- name: Build artifacts
|
|
||||||
if: steps.prepare.outputs.artifacts == 'true'
|
|
||||||
id: build_artifacts
|
|
||||||
uses: docker/build-push-action@v6
|
|
||||||
with:
|
|
||||||
context: ./
|
|
||||||
file: ${{ matrix.dockerfile }}
|
|
||||||
target: artifacts
|
|
||||||
outputs: type=local,dest=artifacts
|
|
||||||
push: false
|
|
||||||
platforms: ${{ steps.prepare.outputs.platforms }}
|
|
||||||
build-args: |
|
|
||||||
BRANCH=${{ steps.prepare.outputs.branch }}
|
|
||||||
BUILD_DATE=${{ steps.prepare.outputs.build_date }}
|
|
||||||
BUILD_VERSION=${{ needs.setup_release.outputs.release_tag }}
|
|
||||||
COMMIT=${{ needs.setup_release.outputs.release_commit }}
|
|
||||||
CLONE_URL=${{ steps.prepare.outputs.clone_url }}
|
|
||||||
RELEASE=${{ needs.setup_release.outputs.publish_release }}
|
|
||||||
tags: ${{ steps.prepare.outputs.tags }}
|
|
||||||
cache-from: type=local,src=/tmp/.buildx-cache
|
|
||||||
cache-to: type=local,dest=/tmp/.buildx-cache
|
|
||||||
no-cache-filters: ${{ steps.prepare.outputs.no_cache_filters }}
|
|
||||||
|
|
||||||
- name: Build and push
|
|
||||||
id: build
|
|
||||||
uses: docker/build-push-action@v6
|
|
||||||
with:
|
|
||||||
context: ./
|
|
||||||
file: ${{ matrix.dockerfile }}
|
|
||||||
push: ${{ needs.setup_release.outputs.publish_release }}
|
|
||||||
platforms: ${{ steps.prepare.outputs.platforms }}
|
|
||||||
build-args: |
|
|
||||||
BRANCH=${{ steps.prepare.outputs.branch }}
|
|
||||||
BUILD_DATE=${{ steps.prepare.outputs.build_date }}
|
|
||||||
BUILD_VERSION=${{ needs.setup_release.outputs.release_tag }}
|
|
||||||
COMMIT=${{ needs.setup_release.outputs.release_commit }}
|
|
||||||
CLONE_URL=${{ steps.prepare.outputs.clone_url }}
|
|
||||||
RELEASE=${{ needs.setup_release.outputs.publish_release }}
|
|
||||||
tags: ${{ steps.prepare.outputs.tags }}
|
|
||||||
cache-from: type=local,src=/tmp/.buildx-cache
|
|
||||||
cache-to: type=local,dest=/tmp/.buildx-cache
|
|
||||||
no-cache-filters: ${{ steps.prepare.outputs.no_cache_filters }}
|
|
||||||
|
|
||||||
- name: Arrange Artifacts
|
|
||||||
if: steps.prepare.outputs.artifacts == 'true'
|
|
||||||
working-directory: artifacts
|
|
||||||
run: |
|
|
||||||
# debug directory
|
|
||||||
echo "Current directory: $(pwd)"
|
|
||||||
echo "Directory contents: $(ls -Ra)"
|
|
||||||
|
|
||||||
# artifacts will be in sub directories named after the docker target platform, e.g. `linux_amd64`
|
|
||||||
# so move files to the artifacts directory
|
|
||||||
# https://unix.stackexchange.com/a/52816
|
|
||||||
find \
|
|
||||||
./ \
|
|
||||||
-maxdepth 2 \
|
|
||||||
-mindepth 2 \
|
|
||||||
-type f \
|
|
||||||
-not -name 'provenance.json' \
|
|
||||||
-exec mv -t ./ -n '{}' +
|
|
||||||
|
|
||||||
# remove provenance file
|
|
||||||
rm -f ./provenance.json
|
|
||||||
|
|
||||||
- name: Upload Artifacts
|
|
||||||
if: steps.prepare.outputs.artifacts == 'true'
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: Docker${{ matrix.tag }}
|
|
||||||
path: artifacts/
|
|
||||||
if-no-files-found: error
|
|
||||||
|
|
||||||
- name: Create/Update GitHub Release
|
|
||||||
if: >
|
|
||||||
needs.setup_release.outputs.publish_release == 'true' &&
|
|
||||||
steps.prepare.outputs.artifacts == 'true'
|
|
||||||
uses: LizardByte/create-release-action@v2025.426.1549
|
|
||||||
with:
|
|
||||||
allowUpdates: true
|
|
||||||
artifacts: "*artifacts/*"
|
|
||||||
body: ${{ needs.setup_release.outputs.release_body }}
|
|
||||||
generateReleaseNotes: ${{ needs.setup_release.outputs.release_generate_release_notes }}
|
|
||||||
name: ${{ needs.setup_release.outputs.release_tag }}
|
|
||||||
prerelease: true
|
|
||||||
tag: ${{ needs.setup_release.outputs.release_tag }}
|
|
||||||
token: ${{ secrets.GH_BOT_TOKEN }}
|
|
||||||
|
|
||||||
- name: Update Docker Hub Description
|
|
||||||
if: >
|
|
||||||
github.event_name == 'push' &&
|
|
||||||
github.ref == 'refs/heads/master'
|
|
||||||
uses: peter-evans/dockerhub-description@v4
|
|
||||||
with:
|
|
||||||
username: ${{ secrets.DOCKER_HUB_USERNAME }}
|
|
||||||
password: ${{ secrets.DOCKER_HUB_PASSWORD }} # token is not currently supported
|
|
||||||
repository: ${{ env.BASE_TAG }}
|
|
||||||
short-description: ${{ github.event.repository.description }}
|
|
||||||
readme-filepath: ./DOCKER_README.md
|
|
||||||
237
.github/workflows/codeql.yml
vendored
237
.github/workflows/codeql.yml
vendored
@ -1,237 +0,0 @@
|
|||||||
---
|
|
||||||
# This workflow is centrally managed in https://github.com/<organization>/.github/
|
|
||||||
# Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in
|
|
||||||
# the above-mentioned repo.
|
|
||||||
|
|
||||||
# This workflow will analyze all supported languages in the repository using CodeQL Analysis.
|
|
||||||
|
|
||||||
name: "CodeQL"
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
schedule:
|
|
||||||
- cron: '00 12 * * 0' # every Sunday at 12:00 UTC
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: "${{ github.workflow }}-${{ github.ref }}"
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
languages:
|
|
||||||
name: Get language matrix
|
|
||||||
outputs:
|
|
||||||
matrix: ${{ steps.lang.outputs.result }}
|
|
||||||
continue: ${{ steps.continue.outputs.result }}
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Get repo languages
|
|
||||||
id: lang
|
|
||||||
uses: actions/github-script@v7
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
// CodeQL supports the following:
|
|
||||||
// ['actions', 'c', 'cpp', 'csharp', 'go', 'java', 'javascript', 'kotlin', 'python', 'ruby', 'swift']
|
|
||||||
|
|
||||||
// Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
|
|
||||||
const supported_languages = [
|
|
||||||
'cpp',
|
|
||||||
'csharp',
|
|
||||||
'go',
|
|
||||||
'java',
|
|
||||||
'javascript',
|
|
||||||
'python',
|
|
||||||
'ruby',
|
|
||||||
'swift',
|
|
||||||
]
|
|
||||||
|
|
||||||
const remap_languages = {
|
|
||||||
'c': 'cpp',
|
|
||||||
'c++': 'cpp',
|
|
||||||
'c#': 'csharp',
|
|
||||||
'kotlin': 'java',
|
|
||||||
'typescript': 'javascript',
|
|
||||||
}
|
|
||||||
|
|
||||||
const repo = context.repo
|
|
||||||
const response = await github.rest.repos.listLanguages(repo)
|
|
||||||
let matrix = {
|
|
||||||
"include": []
|
|
||||||
}
|
|
||||||
|
|
||||||
// Track languages we've already added to avoid duplicates
|
|
||||||
const addedLanguages = new Set()
|
|
||||||
|
|
||||||
// Check if workflow files exist to determine if we should add actions language
|
|
||||||
const fs = require('fs');
|
|
||||||
const hasYmlFiles = fs.existsSync('.github/workflows') &&
|
|
||||||
fs.readdirSync('.github/workflows').some(file => file.endsWith('.yml') || file.endsWith('.yaml'));
|
|
||||||
|
|
||||||
// Add actions language if workflow files exist
|
|
||||||
if (hasYmlFiles) {
|
|
||||||
console.log('Found GitHub Actions workflow files. Adding actions to the matrix.');
|
|
||||||
matrix['include'].push({
|
|
||||||
"category": "/language:actions",
|
|
||||||
"language": "actions",
|
|
||||||
"name": "actions",
|
|
||||||
"os": "ubuntu-latest",
|
|
||||||
"build-mode": "none",
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
for (let [key, value] of Object.entries(response.data)) {
|
|
||||||
// remap language
|
|
||||||
if (remap_languages[key.toLowerCase()]) {
|
|
||||||
console.log(`Remapping language: ${key} to ${remap_languages[key.toLowerCase()]}`)
|
|
||||||
key = remap_languages[key.toLowerCase()]
|
|
||||||
}
|
|
||||||
|
|
||||||
const normalizedKey = key.toLowerCase()
|
|
||||||
|
|
||||||
if (supported_languages.includes(normalizedKey) && !addedLanguages.has(normalizedKey)) {
|
|
||||||
// Mark this language as added
|
|
||||||
addedLanguages.add(normalizedKey)
|
|
||||||
|
|
||||||
console.log(`Found supported language: ${normalizedKey}`)
|
|
||||||
let osList = ['ubuntu-latest'];
|
|
||||||
if (normalizedKey === 'swift') {
|
|
||||||
osList = ['macos-latest'];
|
|
||||||
}
|
|
||||||
for (let os of osList) {
|
|
||||||
// set name for matrix
|
|
||||||
let name = osList.length === 1 ? normalizedKey : `${normalizedKey}, ${os}`
|
|
||||||
|
|
||||||
// set category for matrix
|
|
||||||
let category = `/language:${normalizedKey}`
|
|
||||||
let build_mode = 'none';
|
|
||||||
|
|
||||||
// Set build mode based on language
|
|
||||||
switch (normalizedKey) {
|
|
||||||
case 'csharp':
|
|
||||||
build_mode = 'autobuild'
|
|
||||||
break
|
|
||||||
case 'go':
|
|
||||||
build_mode = 'autobuild'
|
|
||||||
break
|
|
||||||
case 'java':
|
|
||||||
build_mode = 'autobuild'
|
|
||||||
break
|
|
||||||
default:
|
|
||||||
build_mode = 'none'
|
|
||||||
}
|
|
||||||
|
|
||||||
// add to matrix
|
|
||||||
matrix['include'].push({
|
|
||||||
"category": category,
|
|
||||||
"language": normalizedKey,
|
|
||||||
"name": name,
|
|
||||||
"os": os,
|
|
||||||
"build-mode": build_mode,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// print languages
|
|
||||||
console.log(`matrix: ${JSON.stringify(matrix)}`)
|
|
||||||
|
|
||||||
return matrix
|
|
||||||
|
|
||||||
- name: Continue
|
|
||||||
id: continue
|
|
||||||
uses: actions/github-script@v7
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
// if matrix['include'] is an empty list return false, otherwise true
|
|
||||||
const matrix = ${{ steps.lang.outputs.result }} // this is already json encoded
|
|
||||||
|
|
||||||
if (matrix['include'].length == 0) {
|
|
||||||
return false
|
|
||||||
} else {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
analyze:
|
|
||||||
name: Analyze (${{ matrix.name }})
|
|
||||||
if: needs.languages.outputs.continue == 'true'
|
|
||||||
env:
|
|
||||||
GITHUB_CODEQL_BUILD: true
|
|
||||||
needs: languages
|
|
||||||
permissions:
|
|
||||||
actions: read
|
|
||||||
contents: read
|
|
||||||
security-events: write
|
|
||||||
runs-on: ${{ matrix.os || 'ubuntu-latest' }}
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix: ${{ fromJson(needs.languages.outputs.matrix) }}
|
|
||||||
timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 60 }}
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: recursive
|
|
||||||
|
|
||||||
# Initializes the CodeQL tools for scanning.
|
|
||||||
- name: Initialize CodeQL
|
|
||||||
uses: github/codeql-action/init@v3
|
|
||||||
with:
|
|
||||||
languages: ${{ matrix.language }}
|
|
||||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
|
||||||
# By default, queries listed here will override any specified in a config file.
|
|
||||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
|
||||||
|
|
||||||
# yamllint disable-line rule:line-length
|
|
||||||
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
|
|
||||||
# queries: security-extended,security-and-quality
|
|
||||||
config: |
|
|
||||||
paths-ignore:
|
|
||||||
- build
|
|
||||||
- node_modules
|
|
||||||
- third-party
|
|
||||||
build-mode: ${{ matrix.build-mode || 'none' }}
|
|
||||||
|
|
||||||
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift).
|
|
||||||
- name: Autobuild
|
|
||||||
if: matrix.build-mode == 'autobuild'
|
|
||||||
uses: github/codeql-action/autobuild@v3
|
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
|
||||||
uses: github/codeql-action/analyze@v3
|
|
||||||
with:
|
|
||||||
category: "${{ matrix.category }}"
|
|
||||||
output: sarif-results
|
|
||||||
upload: failure-only
|
|
||||||
|
|
||||||
- name: filter-sarif
|
|
||||||
uses: advanced-security/filter-sarif@v1
|
|
||||||
with:
|
|
||||||
input: sarif-results/${{ matrix.language }}.sarif
|
|
||||||
output: sarif-results/${{ matrix.language }}.sarif
|
|
||||||
patterns: |
|
|
||||||
-build/**
|
|
||||||
-node_modules/**
|
|
||||||
-third\-party/**
|
|
||||||
|
|
||||||
- name: Upload SARIF
|
|
||||||
uses: github/codeql-action/upload-sarif@v3
|
|
||||||
with:
|
|
||||||
category: "${{ matrix.category }}"
|
|
||||||
sarif_file: sarif-results/${{ matrix.language }}.sarif
|
|
||||||
|
|
||||||
- name: Upload loc as a Build Artifact
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: sarif-results-${{ matrix.language }}-${{ runner.os }}
|
|
||||||
path: sarif-results
|
|
||||||
if-no-files-found: error
|
|
||||||
retention-days: 1
|
|
||||||
273
.github/workflows/common-lint.yml
vendored
273
.github/workflows/common-lint.yml
vendored
@ -1,273 +0,0 @@
|
|||||||
---
|
|
||||||
# This workflow is centrally managed in https://github.com/<organization>/.github/
|
|
||||||
# Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in
|
|
||||||
# the above-mentioned repo.
|
|
||||||
|
|
||||||
# Common linting.
|
|
||||||
|
|
||||||
name: common lint
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
types:
|
|
||||||
- opened
|
|
||||||
- synchronize
|
|
||||||
- reopened
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: "${{ github.workflow }}-${{ github.ref }}"
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
lint:
|
|
||||||
name: Common Lint
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Set up Python
|
|
||||||
uses: actions/setup-python@v5
|
|
||||||
with:
|
|
||||||
python-version: '3.12'
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: |
|
|
||||||
python -m pip install --upgrade \
|
|
||||||
pip \
|
|
||||||
setuptools \
|
|
||||||
wheel \
|
|
||||||
cmakelang \
|
|
||||||
flake8 \
|
|
||||||
nb-clean \
|
|
||||||
nbqa[toolchain]
|
|
||||||
|
|
||||||
- name: C++ - find files
|
|
||||||
id: cpp_files
|
|
||||||
run: |
|
|
||||||
# find files
|
|
||||||
found_files=$(find . -type f \
|
|
||||||
-iname "*.c" -o \
|
|
||||||
-iname "*.cpp" -o \
|
|
||||||
-iname "*.h" -o \
|
|
||||||
-iname "*.hpp" -o \
|
|
||||||
-iname "*.m" -o \
|
|
||||||
-iname "*.mm" \
|
|
||||||
)
|
|
||||||
ignore_files=$(find . -type f -iname ".clang-format-ignore")
|
|
||||||
|
|
||||||
# Loop through each C++ file
|
|
||||||
for file in $found_files; do
|
|
||||||
for ignore_file in $ignore_files; do
|
|
||||||
ignore_directory=$(dirname "$ignore_file")
|
|
||||||
# if directory of ignore_file is beginning of file
|
|
||||||
if [[ "$file" == "$ignore_directory"* ]]; then
|
|
||||||
echo "ignoring file: ${file}"
|
|
||||||
found_files="${found_files//${file}/}"
|
|
||||||
break 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
done
|
|
||||||
|
|
||||||
# remove empty lines
|
|
||||||
found_files=$(echo "$found_files" | sed '/^\s*$/d')
|
|
||||||
|
|
||||||
echo "found cpp files: ${found_files}"
|
|
||||||
|
|
||||||
# do not quote to keep this as a single line
|
|
||||||
echo found_files=${found_files} >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: C++ - Clang format lint
|
|
||||||
if: always() && steps.cpp_files.outputs.found_files
|
|
||||||
uses: DoozyX/clang-format-lint-action@v0.20
|
|
||||||
with:
|
|
||||||
source: ${{ steps.cpp_files.outputs.found_files }}
|
|
||||||
clangFormatVersion: '20'
|
|
||||||
extensions: 'c,cpp,h,hpp,m,mm'
|
|
||||||
style: file
|
|
||||||
inplace: false
|
|
||||||
|
|
||||||
- name: CMake - find files
|
|
||||||
id: cmake_files
|
|
||||||
if: always()
|
|
||||||
run: |
|
|
||||||
# find files
|
|
||||||
found_files=$(find . -type f -iname "CMakeLists.txt" -o -iname "*.cmake")
|
|
||||||
ignore_files=$(find . -type f -iname ".cmake-lint-ignore")
|
|
||||||
|
|
||||||
# Loop through each C++ file
|
|
||||||
for file in $found_files; do
|
|
||||||
for ignore_file in $ignore_files; do
|
|
||||||
ignore_directory=$(dirname "$ignore_file")
|
|
||||||
# if directory of ignore_file is beginning of file
|
|
||||||
if [[ "$file" == "$ignore_directory"* ]]; then
|
|
||||||
echo "ignoring file: ${file}"
|
|
||||||
found_files="${found_files//${file}/}"
|
|
||||||
break 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
done
|
|
||||||
|
|
||||||
# remove empty lines
|
|
||||||
found_files=$(echo "$found_files" | sed '/^\s*$/d')
|
|
||||||
|
|
||||||
echo "found cmake files: ${found_files}"
|
|
||||||
|
|
||||||
# do not quote to keep this as a single line
|
|
||||||
echo found_files=${found_files} >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: CMake - cmake-lint
|
|
||||||
if: always() && steps.cmake_files.outputs.found_files
|
|
||||||
run: |
|
|
||||||
cmake-lint --line-width 120 --tab-size 4 ${{ steps.cmake_files.outputs.found_files }}
|
|
||||||
|
|
||||||
- name: Docker - find files
|
|
||||||
id: dokcer_files
|
|
||||||
if: always()
|
|
||||||
run: |
|
|
||||||
found_files=$(find . -type f -iname "Dockerfile" -o -iname "*.dockerfile")
|
|
||||||
|
|
||||||
echo "found_files: ${found_files}"
|
|
||||||
|
|
||||||
# do not quote to keep this as a single line
|
|
||||||
echo found_files=${found_files} >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Docker - hadolint
|
|
||||||
if: always() && steps.dokcer_files.outputs.found_files
|
|
||||||
run: |
|
|
||||||
docker pull hadolint/hadolint
|
|
||||||
|
|
||||||
# create hadolint config file
|
|
||||||
cat <<EOF > .hadolint.yaml
|
|
||||||
---
|
|
||||||
ignored:
|
|
||||||
- DL3008
|
|
||||||
- DL3013
|
|
||||||
- DL3016
|
|
||||||
- DL3018
|
|
||||||
- DL3028
|
|
||||||
- DL3059
|
|
||||||
EOF
|
|
||||||
|
|
||||||
failed=0
|
|
||||||
failed_files=""
|
|
||||||
|
|
||||||
for file in ${{ steps.dokcer_files.outputs.found_files }}; do
|
|
||||||
echo "::group::${file}"
|
|
||||||
docker run --rm -i \
|
|
||||||
-e "NO_COLOR=0" \
|
|
||||||
-e "HADOLINT_VERBOSE=1" \
|
|
||||||
-v $(pwd)/.hadolint.yaml:/.config/hadolint.yaml \
|
|
||||||
hadolint/hadolint < $file || {
|
|
||||||
failed=1
|
|
||||||
failed_files="$failed_files $file"
|
|
||||||
}
|
|
||||||
echo "::endgroup::"
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ $failed -ne 0 ]; then
|
|
||||||
echo "::error:: hadolint failed for the following files: $failed_files"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Python - flake8
|
|
||||||
if: always()
|
|
||||||
run: |
|
|
||||||
python -m flake8 \
|
|
||||||
--color=always \
|
|
||||||
--verbose
|
|
||||||
|
|
||||||
- name: Python - nbqa flake8
|
|
||||||
if: always()
|
|
||||||
run: |
|
|
||||||
python -m nbqa flake8 \
|
|
||||||
--color=always \
|
|
||||||
--verbose \
|
|
||||||
.
|
|
||||||
|
|
||||||
- name: Python - nb-clean
|
|
||||||
if: always()
|
|
||||||
run: |
|
|
||||||
output=$(find . -name '*.ipynb' -exec nb-clean check {} \;)
|
|
||||||
|
|
||||||
# fail if there are any issues
|
|
||||||
if [ -n "$output" ]; then
|
|
||||||
echo "$output"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Rust - find Cargo.toml
|
|
||||||
id: run_cargo
|
|
||||||
if: always()
|
|
||||||
run: |
|
|
||||||
# check if Cargo.toml exists
|
|
||||||
if [ -f "Cargo.toml" ]; then
|
|
||||||
echo "found_cargo=true" >> $GITHUB_OUTPUT
|
|
||||||
else
|
|
||||||
echo "found_cargo=false" >> $GITHUB_OUTPUT
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Rust - setup toolchain
|
|
||||||
if: always() && steps.run_cargo.outputs.found_cargo == 'true'
|
|
||||||
uses: dtolnay/rust-toolchain@stable
|
|
||||||
with:
|
|
||||||
components: rustfmt
|
|
||||||
|
|
||||||
- name: Rust - cargo fmt
|
|
||||||
if: always() && steps.run_cargo.outputs.found_cargo == 'true'
|
|
||||||
run: |
|
|
||||||
cargo fmt -- --check
|
|
||||||
|
|
||||||
- name: YAML - find files
|
|
||||||
id: yaml_files
|
|
||||||
if: always()
|
|
||||||
run: |
|
|
||||||
# space separated list of files
|
|
||||||
FILES=.clang-format
|
|
||||||
|
|
||||||
# empty placeholder
|
|
||||||
found_files=""
|
|
||||||
|
|
||||||
for FILE in ${FILES}; do
|
|
||||||
if [ -f "$FILE" ]
|
|
||||||
then
|
|
||||||
found_files="$found_files $FILE"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "found_files=${found_files}" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: YAML - yamllint
|
|
||||||
id: yamllint
|
|
||||||
if: always()
|
|
||||||
uses: ibiqlik/action-yamllint@v3
|
|
||||||
with:
|
|
||||||
# https://yamllint.readthedocs.io/en/stable/configuration.html#default-configuration
|
|
||||||
config_data: |
|
|
||||||
extends: default
|
|
||||||
rules:
|
|
||||||
comments:
|
|
||||||
level: error
|
|
||||||
document-start:
|
|
||||||
level: error
|
|
||||||
line-length:
|
|
||||||
max: 120
|
|
||||||
new-line-at-end-of-file:
|
|
||||||
level: error
|
|
||||||
new-lines:
|
|
||||||
type: unix
|
|
||||||
truthy:
|
|
||||||
# GitHub uses "on" for workflow event triggers
|
|
||||||
# .clang-format file has options of "Yes" "No" that will be caught by this, so changed to "warning"
|
|
||||||
allowed-values: ['true', 'false', 'on']
|
|
||||||
check-keys: true
|
|
||||||
level: warning
|
|
||||||
file_or_dir: . ${{ steps.yaml_files.outputs.found_files }}
|
|
||||||
|
|
||||||
- name: YAML - log
|
|
||||||
if: always() && steps.yamllint.outcome == 'failure'
|
|
||||||
run: cat "${{ steps.yamllint.outputs.logfile }}" >> $GITHUB_STEP_SUMMARY
|
|
||||||
137
.github/workflows/release-notifier.yml
vendored
137
.github/workflows/release-notifier.yml
vendored
@ -1,137 +0,0 @@
|
|||||||
---
|
|
||||||
# This workflow is centrally managed in https://github.com/<organization>/.github/
|
|
||||||
# Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in
|
|
||||||
# the above-mentioned repo.
|
|
||||||
|
|
||||||
# Create a blog post for a new release and open a PR to the blog repo
|
|
||||||
|
|
||||||
name: Release Notifications
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
on:
|
|
||||||
release:
|
|
||||||
types:
|
|
||||||
- released # this triggers when a release is published, but does not include pre-releases or drafts
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
update-blog:
|
|
||||||
name: Update blog
|
|
||||||
if: github.repository_owner == 'LizardByte'
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Check topics
|
|
||||||
env:
|
|
||||||
TOPIC: replicator-release-notifications
|
|
||||||
id: check-label
|
|
||||||
uses: actions/github-script@v7
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
const topic = process.env.TOPIC;
|
|
||||||
console.log(`Checking if repo has topic: ${topic}`);
|
|
||||||
|
|
||||||
const repoTopics = await github.rest.repos.getAllTopics({
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo
|
|
||||||
});
|
|
||||||
console.log(`Repo topics: ${repoTopics.data.names}`);
|
|
||||||
|
|
||||||
const hasTopic = repoTopics.data.names.includes(topic);
|
|
||||||
console.log(`Has topic: ${hasTopic}`);
|
|
||||||
|
|
||||||
core.setOutput('hasTopic', hasTopic);
|
|
||||||
|
|
||||||
- name: Check if latest GitHub release
|
|
||||||
id: check-release
|
|
||||||
if: steps.check-label.outputs.hasTopic == 'true'
|
|
||||||
uses: actions/github-script@v7
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
const latestRelease = await github.rest.repos.getLatestRelease({
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo
|
|
||||||
});
|
|
||||||
|
|
||||||
core.setOutput('isLatestRelease', latestRelease.data.tag_name === context.payload.release.tag_name);
|
|
||||||
|
|
||||||
- name: Checkout blog
|
|
||||||
if: >-
|
|
||||||
steps.check-label.outputs.hasTopic == 'true' &&
|
|
||||||
steps.check-release.outputs.isLatestRelease == 'true'
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
repository: "LizardByte/LizardByte.github.io"
|
|
||||||
|
|
||||||
- name: Create blog post
|
|
||||||
if: >-
|
|
||||||
steps.check-label.outputs.hasTopic == 'true' &&
|
|
||||||
steps.check-release.outputs.isLatestRelease == 'true'
|
|
||||||
run: |
|
|
||||||
# setup variables
|
|
||||||
tag_name="${{ github.event.release.tag_name }}"
|
|
||||||
semver="${tag_name#v}"
|
|
||||||
repo_lower="$(echo "${{ github.event.repository.name }}" | tr '[:upper:]' '[:lower:]')"
|
|
||||||
|
|
||||||
# extract year, month, and day
|
|
||||||
year="${semver%%.*}"
|
|
||||||
month_day="${semver#*.}"
|
|
||||||
month_day="${month_day%%.*}"
|
|
||||||
|
|
||||||
# ensure month_day is 4 digits
|
|
||||||
month_day=$(printf "%04d" "$month_day")
|
|
||||||
|
|
||||||
# create the filename
|
|
||||||
file_name="_posts/releases/${repo_lower}/${year}-${month_day:0:2}-${month_day:2:2}-v${semver}.md"
|
|
||||||
mkdir -p "$(dirname "${file_name}")"
|
|
||||||
|
|
||||||
# create jekyll blog post
|
|
||||||
echo "---" > "${file_name}"
|
|
||||||
echo "layout: release" >> "${file_name}"
|
|
||||||
echo "title: ${{ github.event.repository.name }} ${tag_name} Released" >> "${file_name}"
|
|
||||||
echo "release-tag: ${tag_name}" >> "${file_name}"
|
|
||||||
echo "gh-repo: ${{ github.repository }}" >> "${file_name}"
|
|
||||||
echo "gh-badge: [follow, fork, star]" >> "${file_name}"
|
|
||||||
echo "tags: [release, ${repo_lower}]" >> "${file_name}"
|
|
||||||
echo "comments: true" >> "${file_name}"
|
|
||||||
echo "author: LizardByte-bot" >> "${file_name}"
|
|
||||||
echo "---" >> "${file_name}"
|
|
||||||
echo "" >> "${file_name}"
|
|
||||||
|
|
||||||
release_body=$(cat <<EOF
|
|
||||||
${{ github.event.release.body }}
|
|
||||||
EOF
|
|
||||||
)
|
|
||||||
|
|
||||||
echo "${release_body}" >> "${file_name}"
|
|
||||||
|
|
||||||
- name: Create/Update Pull Request
|
|
||||||
id: create-pr
|
|
||||||
if: >-
|
|
||||||
steps.check-label.outputs.hasTopic == 'true' &&
|
|
||||||
steps.check-release.outputs.isLatestRelease == 'true'
|
|
||||||
uses: peter-evans/create-pull-request@v7
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.GH_BOT_TOKEN }}
|
|
||||||
commit-message: |
|
|
||||||
chore: Add blog post for ${{ github.event.repository.name }} release ${{ github.event.release.tag_name }}
|
|
||||||
branch: bot/add-${{ github.event.repository.name }}-${{ github.event.release.tag_name }}
|
|
||||||
delete-branch: true
|
|
||||||
title: |
|
|
||||||
chore: Add blog post for ${{ github.event.repository.name }} release ${{ github.event.release.tag_name }}
|
|
||||||
body: ${{ github.event.release.body }}
|
|
||||||
labels:
|
|
||||||
blog
|
|
||||||
|
|
||||||
- name: Automerge PR
|
|
||||||
env:
|
|
||||||
GH_TOKEN: ${{ secrets.GH_BOT_TOKEN }}
|
|
||||||
if: >-
|
|
||||||
steps.check-label.outputs.hasTopic == 'true' &&
|
|
||||||
steps.check-release.outputs.isLatestRelease == 'true'
|
|
||||||
run: |
|
|
||||||
gh pr merge \
|
|
||||||
--auto \
|
|
||||||
--delete-branch \
|
|
||||||
--repo "LizardByte/LizardByte.github.io" \
|
|
||||||
--squash \
|
|
||||||
"${{ steps.create-pr.outputs.pull-request-number }}"
|
|
||||||
99
.github/workflows/update-docs.yml
vendored
99
.github/workflows/update-docs.yml
vendored
@ -1,99 +0,0 @@
|
|||||||
---
|
|
||||||
# This workflow is centrally managed in https://github.com/<organization>/.github/
|
|
||||||
# Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in
|
|
||||||
# the above-mentioned repo.
|
|
||||||
|
|
||||||
# To use, add the `rtd` repository label to identify repositories that should trigger this workflow.
|
|
||||||
# If the project slug is not the repository name, add a repository variable named `READTHEDOCS_SLUG` with the value of
|
|
||||||
# the ReadTheDocs project slug.
|
|
||||||
|
|
||||||
# Update readthedocs on release events.
|
|
||||||
|
|
||||||
name: Update docs
|
|
||||||
permissions: {}
|
|
||||||
|
|
||||||
on:
|
|
||||||
release:
|
|
||||||
types:
|
|
||||||
- created
|
|
||||||
- edited
|
|
||||||
- deleted
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: "${{ github.workflow }}-${{ github.event.release.tag_name }}"
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
update-docs:
|
|
||||||
env:
|
|
||||||
RTD_SLUG: ${{ vars.READTHEDOCS_SLUG }}
|
|
||||||
RTD_TOKEN: ${{ secrets.READTHEDOCS_TOKEN }}
|
|
||||||
TAG: ${{ github.event.release.tag_name }}
|
|
||||||
if: >-
|
|
||||||
!github.event.release.draft
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Get RTD_SLUG
|
|
||||||
run: |
|
|
||||||
# if the RTD_SLUG is not set, use the repository name in lowercase
|
|
||||||
if [ -z "${RTD_SLUG}" ]; then
|
|
||||||
RTD_SLUG=$(echo "${{ github.event.repository.name }}" | tr '[:upper:]' '[:lower:]')
|
|
||||||
fi
|
|
||||||
echo "RTD_SLUG=${RTD_SLUG}" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Deactivate deleted release
|
|
||||||
if: >-
|
|
||||||
github.event_name == 'release' &&
|
|
||||||
github.event.action == 'deleted'
|
|
||||||
run: |
|
|
||||||
json_body=$(jq -n \
|
|
||||||
--arg active "false" \
|
|
||||||
--arg hidden "false" \
|
|
||||||
--arg privacy_level "public" \
|
|
||||||
'{active: $active, hidden: $hidden, privacy_level: $privacy_level}')
|
|
||||||
|
|
||||||
curl \
|
|
||||||
-X PATCH \
|
|
||||||
-H "Authorization: Token ${RTD_TOKEN}" \
|
|
||||||
https://readthedocs.org/api/v3/projects/${RTD_SLUG}/versions/${TAG}/ \
|
|
||||||
-H "Content-Type: application/json" \
|
|
||||||
-d "$json_body"
|
|
||||||
|
|
||||||
- name: Check if edited release is latest GitHub release
|
|
||||||
id: check
|
|
||||||
if: >-
|
|
||||||
github.event_name == 'release' &&
|
|
||||||
github.event.action == 'edited'
|
|
||||||
uses: actions/github-script@v7
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
const latestRelease = await github.rest.repos.getLatestRelease({
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo
|
|
||||||
});
|
|
||||||
|
|
||||||
core.setOutput('isLatestRelease', latestRelease.data.tag_name === context.payload.release.tag_name);
|
|
||||||
|
|
||||||
- name: Update RTD project
|
|
||||||
# changing the default branch in readthedocs makes "latest" point to that branch/tag
|
|
||||||
# we can also update other properties like description, etc.
|
|
||||||
if: steps.check.outputs.isLatestRelease == 'true'
|
|
||||||
run: |
|
|
||||||
json_body=$(jq -n \
|
|
||||||
--arg default_branch "${TAG}" \
|
|
||||||
--arg description "${{ github.event.repository.description }}" \
|
|
||||||
'{default_branch: $default_branch}')
|
|
||||||
|
|
||||||
# change the default branch to the latest release
|
|
||||||
curl \
|
|
||||||
-X PATCH \
|
|
||||||
-H "Authorization: Token ${RTD_TOKEN}" \
|
|
||||||
-H "Content-Type: application/json" \
|
|
||||||
https://readthedocs.org/api/v3/projects/${RTD_SLUG}/ \
|
|
||||||
-d "$json_body"
|
|
||||||
|
|
||||||
# trigger a build for the latest version
|
|
||||||
curl \
|
|
||||||
-X POST \
|
|
||||||
-H "Authorization: Token ${RTD_TOKEN}" \
|
|
||||||
https://readthedocs.org/api/v3/projects/${RTD_SLUG}/versions/latest/builds/
|
|
||||||
187
.github/workflows/update-flathub-repo.yml
vendored
187
.github/workflows/update-flathub-repo.yml
vendored
@ -1,187 +0,0 @@
|
|||||||
---
|
|
||||||
# This workflow is centrally managed in https://github.com/<organization>/.github/
|
|
||||||
# Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in
|
|
||||||
# the above-mentioned repo.
|
|
||||||
|
|
||||||
# To use, add the `flathub-pkg` repository label to identify repositories that should trigger this workflow.
|
|
||||||
|
|
||||||
# Update Flathub on release events.
|
|
||||||
|
|
||||||
name: Update flathub repo
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
on:
|
|
||||||
release:
|
|
||||||
types:
|
|
||||||
- released
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: "${{ github.workflow }}-${{ github.event.release.tag_name }}"
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
update-flathub-repo:
|
|
||||||
env:
|
|
||||||
FLATHUB_PKG: dev.lizardbyte.app.${{ github.event.repository.name }}
|
|
||||||
if: github.repository_owner == 'LizardByte'
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Check if flathub repo
|
|
||||||
id: check-label
|
|
||||||
env:
|
|
||||||
TOPIC: flathub-pkg
|
|
||||||
uses: actions/github-script@v7
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
const topic = process.env.TOPIC;
|
|
||||||
console.log(`Checking if repo has topic: ${topic}`);
|
|
||||||
|
|
||||||
const repoTopics = await github.rest.repos.getAllTopics({
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo
|
|
||||||
});
|
|
||||||
console.log(`Repo topics: ${repoTopics.data.names}`);
|
|
||||||
|
|
||||||
const hasTopic = repoTopics.data.names.includes(topic);
|
|
||||||
console.log(`Has topic: ${hasTopic}`);
|
|
||||||
|
|
||||||
core.setOutput('hasTopic', hasTopic);
|
|
||||||
|
|
||||||
- name: Check if latest GitHub release
|
|
||||||
id: check-release
|
|
||||||
if: steps.check-label.outputs.hasTopic == 'true'
|
|
||||||
uses: actions/github-script@v7
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
const latestRelease = await github.rest.repos.getLatestRelease({
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo
|
|
||||||
});
|
|
||||||
|
|
||||||
core.setOutput('isLatestRelease', latestRelease.data.tag_name === context.payload.release.tag_name);
|
|
||||||
|
|
||||||
- name: Checkout
|
|
||||||
if: >-
|
|
||||||
steps.check-label.outputs.hasTopic == 'true' &&
|
|
||||||
steps.check-release.outputs.isLatestRelease == 'true'
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Checkout flathub-repo
|
|
||||||
if: >-
|
|
||||||
steps.check-label.outputs.hasTopic == 'true' &&
|
|
||||||
steps.check-release.outputs.isLatestRelease == 'true'
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
repository: "flathub/${{ env.FLATHUB_PKG }}"
|
|
||||||
path: "flathub/${{ env.FLATHUB_PKG }}"
|
|
||||||
|
|
||||||
- name: Clean up legacy files
|
|
||||||
if: >-
|
|
||||||
steps.check-label.outputs.hasTopic == 'true' &&
|
|
||||||
steps.check-release.outputs.isLatestRelease == 'true'
|
|
||||||
working-directory: flathub/${{ env.FLATHUB_PKG }}
|
|
||||||
run: |
|
|
||||||
rm -rf ./*
|
|
||||||
|
|
||||||
- name: Copy github files
|
|
||||||
if: >-
|
|
||||||
steps.check-label.outputs.hasTopic == 'true' &&
|
|
||||||
steps.check-release.outputs.isLatestRelease == 'true'
|
|
||||||
working-directory: flathub/${{ env.FLATHUB_PKG }}
|
|
||||||
run: |
|
|
||||||
mkdir -p .github/ISSUE_TEMPLATE
|
|
||||||
|
|
||||||
# sponsors
|
|
||||||
curl -sSL https://github.com/LizardByte/.github/raw/refs/heads/master/.github/FUNDING.yml \
|
|
||||||
-o .github/FUNDING.yml
|
|
||||||
# pull request template
|
|
||||||
curl -sSL https://github.com/LizardByte/.github/raw/refs/heads/master/.github/pull_request_template.md \
|
|
||||||
-o .github/pull_request_template.md
|
|
||||||
# issue config
|
|
||||||
curl -sSL https://github.com/LizardByte/.github/raw/refs/heads/master/.github/ISSUE_TEMPLATE/config.yml \
|
|
||||||
-o .github/ISSUE_TEMPLATE/config.yml
|
|
||||||
|
|
||||||
- name: Download release asset
|
|
||||||
id: download
|
|
||||||
if: >-
|
|
||||||
steps.check-label.outputs.hasTopic == 'true' &&
|
|
||||||
steps.check-release.outputs.isLatestRelease == 'true'
|
|
||||||
uses: robinraju/release-downloader@v1.12
|
|
||||||
with:
|
|
||||||
repository: "${{ github.repository }}"
|
|
||||||
tag: "${{ github.event.release.tag_name }}"
|
|
||||||
fileName: "flathub.tar.gz"
|
|
||||||
tarBall: false
|
|
||||||
zipBall: false
|
|
||||||
out-file-path: "flathub/${{ env.FLATHUB_PKG }}"
|
|
||||||
extract: true
|
|
||||||
|
|
||||||
- name: Delete archive
|
|
||||||
if: >-
|
|
||||||
steps.check-label.outputs.hasTopic == 'true' &&
|
|
||||||
steps.check-release.outputs.isLatestRelease == 'true'
|
|
||||||
run: |
|
|
||||||
rm -f flathub/${{ env.FLATHUB_PKG }}/flathub.tar.gz
|
|
||||||
|
|
||||||
- name: Update metainfo.xml
|
|
||||||
id: update_metainfo
|
|
||||||
if: >-
|
|
||||||
steps.check-label.outputs.hasTopic == 'true' &&
|
|
||||||
steps.check-release.outputs.isLatestRelease == 'true'
|
|
||||||
run: |
|
|
||||||
xml_file="flathub/${{ env.FLATHUB_PKG }}/${{ env.FLATHUB_PKG }}.metainfo.xml"
|
|
||||||
|
|
||||||
# Extract release information
|
|
||||||
changelog="${{ github.event.release.body }}" && changelog="${changelog//&/&}" && \
|
|
||||||
changelog="${changelog//</<}" && changelog="${changelog//>/>}"
|
|
||||||
|
|
||||||
# Replace changelog placeholder with actual changelog
|
|
||||||
sed -i "s|<!-- changelog -->|$changelog|g" "$xml_file"
|
|
||||||
|
|
||||||
- name: Update submodule
|
|
||||||
if: >-
|
|
||||||
steps.check-label.outputs.hasTopic == 'true' &&
|
|
||||||
steps.check-release.outputs.isLatestRelease == 'true'
|
|
||||||
run: |
|
|
||||||
# Get the current commit of the submodule in the main repository
|
|
||||||
git submodule update --init packaging/linux/flatpak/deps/shared-modules
|
|
||||||
cd ${{ github.workspace }}/packaging/linux/flatpak/deps/shared-modules
|
|
||||||
main_commit=$(git rev-parse HEAD)
|
|
||||||
|
|
||||||
# update submodules
|
|
||||||
cd ${{ github.workspace }}/flathub/${{ env.FLATHUB_PKG }}
|
|
||||||
git submodule update --init shared-modules
|
|
||||||
cd shared-modules
|
|
||||||
git checkout $main_commit
|
|
||||||
|
|
||||||
- name: Create/Update Pull Request
|
|
||||||
id: create-pr
|
|
||||||
if: >-
|
|
||||||
steps.check-label.outputs.hasTopic == 'true' &&
|
|
||||||
steps.check-release.outputs.isLatestRelease == 'true' &&
|
|
||||||
fromJson(steps.download.outputs.downloaded_files)[0]
|
|
||||||
uses: peter-evans/create-pull-request@v7
|
|
||||||
with:
|
|
||||||
path: "flathub/${{ env.FLATHUB_PKG }}"
|
|
||||||
token: ${{ secrets.GH_BOT_TOKEN }}
|
|
||||||
commit-message: "chore: Update ${{ env.FLATHUB_PKG }} to ${{ github.event.release.tag_name }}"
|
|
||||||
branch: bot/bump-${{ env.FLATHUB_PKG }}-${{ github.event.release.tag_name }}
|
|
||||||
delete-branch: true
|
|
||||||
title: "chore: Update ${{ env.FLATHUB_PKG }} to ${{ github.event.release.tag_name }}"
|
|
||||||
body: ${{ github.event.release.body }}
|
|
||||||
|
|
||||||
- name: Automerge PR
|
|
||||||
env:
|
|
||||||
GH_TOKEN: ${{ secrets.GH_BOT_TOKEN }}
|
|
||||||
if: >-
|
|
||||||
steps.check-label.outputs.hasTopic == 'true' &&
|
|
||||||
steps.check-release.outputs.isLatestRelease == 'true' &&
|
|
||||||
fromJson(steps.download.outputs.downloaded_files)[0]
|
|
||||||
run: |
|
|
||||||
gh pr merge \
|
|
||||||
--auto \
|
|
||||||
--delete-branch \
|
|
||||||
--repo "flathub/${{ env.FLATHUB_PKG }}" \
|
|
||||||
--squash \
|
|
||||||
"${{ steps.create-pr.outputs.pull-request-number }}"
|
|
||||||
73
.github/workflows/update-homebrew-release.yml
vendored
73
.github/workflows/update-homebrew-release.yml
vendored
@ -1,73 +0,0 @@
|
|||||||
---
|
|
||||||
# This workflow is centrally managed in https://github.com/<organization>/.github/
|
|
||||||
# Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in
|
|
||||||
# the above-mentioned repo.
|
|
||||||
|
|
||||||
# To use, add the `homebrew-pkg` repository label to identify repositories that should trigger this workflow.
|
|
||||||
|
|
||||||
# Update Homebrew on release events.
|
|
||||||
|
|
||||||
name: Update Homebrew release
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
on:
|
|
||||||
release:
|
|
||||||
types:
|
|
||||||
- released
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: "${{ github.workflow }}-${{ github.event.release.tag_name }}"
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
update-homebrew-release:
|
|
||||||
if: github.repository_owner == 'LizardByte'
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Check if Homebrew repo
|
|
||||||
id: check-label
|
|
||||||
env:
|
|
||||||
TOPIC: homebrew-pkg
|
|
||||||
uses: actions/github-script@v7
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
const topic = process.env.TOPIC;
|
|
||||||
console.log(`Checking if repo has topic: ${topic}`);
|
|
||||||
|
|
||||||
const repoTopics = await github.rest.repos.getAllTopics({
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo
|
|
||||||
});
|
|
||||||
console.log(`Repo topics: ${repoTopics.data.names}`);
|
|
||||||
|
|
||||||
const hasTopic = repoTopics.data.names.includes(topic);
|
|
||||||
console.log(`Has topic: ${hasTopic}`);
|
|
||||||
|
|
||||||
core.setOutput('hasTopic', hasTopic);
|
|
||||||
|
|
||||||
- name: Download release asset
|
|
||||||
id: download
|
|
||||||
if: steps.check-label.outputs.hasTopic == 'true'
|
|
||||||
uses: robinraju/release-downloader@v1.12
|
|
||||||
with:
|
|
||||||
repository: "${{ github.repository }}"
|
|
||||||
tag: "${{ github.event.release.tag_name }}"
|
|
||||||
fileName: "*.rb"
|
|
||||||
tarBall: false
|
|
||||||
zipBall: false
|
|
||||||
out-file-path: "release_downloads"
|
|
||||||
extract: false
|
|
||||||
|
|
||||||
- name: Publish Homebrew Formula
|
|
||||||
if: >-
|
|
||||||
steps.check-label.outputs.hasTopic == 'true' &&
|
|
||||||
fromJson(steps.download.outputs.downloaded_files)[0]
|
|
||||||
uses: LizardByte/homebrew-release-action@v2025.506.15440
|
|
||||||
with:
|
|
||||||
formula_file: ${{ fromJson(steps.download.outputs.downloaded_files)[0] }}
|
|
||||||
git_email: ${{ secrets.GH_BOT_EMAIL }}
|
|
||||||
git_username: ${{ secrets.GH_BOT_NAME }}
|
|
||||||
publish: true
|
|
||||||
token: ${{ secrets.GH_BOT_TOKEN }}
|
|
||||||
validate: false
|
|
||||||
134
.github/workflows/update-pacman-repo.yml
vendored
134
.github/workflows/update-pacman-repo.yml
vendored
@ -1,134 +0,0 @@
|
|||||||
---
|
|
||||||
# This workflow is centrally managed in https://github.com/<organization>/.github/
|
|
||||||
# Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in
|
|
||||||
# the above-mentioned repo.
|
|
||||||
|
|
||||||
# To use, add the `pacman-pkg` repository label to identify repositories that should trigger this workflow.
|
|
||||||
|
|
||||||
# Update pacman repo on release events.
|
|
||||||
|
|
||||||
name: Update pacman repo
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
on:
|
|
||||||
release:
|
|
||||||
types:
|
|
||||||
- released
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: "${{ github.workflow }}-${{ github.event.release.tag_name }}"
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
update-homebrew-release:
|
|
||||||
if: github.repository_owner == 'LizardByte'
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Check if pacman repo
|
|
||||||
id: check-label
|
|
||||||
env:
|
|
||||||
TOPIC: pacman-pkg
|
|
||||||
uses: actions/github-script@v7
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
const topic = process.env.TOPIC;
|
|
||||||
console.log(`Checking if repo has topic: ${topic}`);
|
|
||||||
|
|
||||||
const repoTopics = await github.rest.repos.getAllTopics({
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo
|
|
||||||
});
|
|
||||||
console.log(`Repo topics: ${repoTopics.data.names}`);
|
|
||||||
|
|
||||||
const hasTopic = repoTopics.data.names.includes(topic);
|
|
||||||
console.log(`Has topic: ${hasTopic}`);
|
|
||||||
|
|
||||||
core.setOutput('hasTopic', hasTopic);
|
|
||||||
|
|
||||||
- name: Check if latest GitHub release
|
|
||||||
id: check-release
|
|
||||||
if: >-
|
|
||||||
steps.check-label.outputs.hasTopic == 'true'
|
|
||||||
uses: actions/github-script@v7
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
const latestRelease = await github.rest.repos.getLatestRelease({
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo
|
|
||||||
});
|
|
||||||
|
|
||||||
core.setOutput('isLatestRelease', latestRelease.data.tag_name === context.payload.release.tag_name);
|
|
||||||
|
|
||||||
- name: Checkout pacman-repo
|
|
||||||
if: >-
|
|
||||||
steps.check-label.outputs.hasTopic == 'true' &&
|
|
||||||
steps.check-release.outputs.isLatestRelease == 'true'
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
repository: ${{ github.repository_owner }}/pacman-repo
|
|
||||||
|
|
||||||
- name: Prep
|
|
||||||
id: prep
|
|
||||||
if: >-
|
|
||||||
steps.check-label.outputs.hasTopic == 'true' &&
|
|
||||||
steps.check-release.outputs.isLatestRelease == 'true'
|
|
||||||
run: |
|
|
||||||
echo "pkg_name=$(echo ${{ github.event.repository.name }} | tr '[:upper:]' '[:lower:]')" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Download release asset
|
|
||||||
id: download
|
|
||||||
if: >-
|
|
||||||
steps.check-label.outputs.hasTopic == 'true' &&
|
|
||||||
steps.check-release.outputs.isLatestRelease == 'true'
|
|
||||||
uses: robinraju/release-downloader@v1.12
|
|
||||||
with:
|
|
||||||
repository: "${{ github.repository }}"
|
|
||||||
tag: "${{ github.event.release.tag_name }}"
|
|
||||||
fileName: "*.pkg.tar.gz"
|
|
||||||
tarBall: false
|
|
||||||
zipBall: false
|
|
||||||
out-file-path: "pkgbuilds/${{ steps.prep.outputs.pkg_name }}"
|
|
||||||
extract: true
|
|
||||||
|
|
||||||
- name: Remove pkg.tar.gz
|
|
||||||
if: >-
|
|
||||||
steps.check-label.outputs.hasTopic == 'true' &&
|
|
||||||
steps.check-release.outputs.isLatestRelease == 'true' &&
|
|
||||||
fromJson(steps.download.outputs.downloaded_files)[0]
|
|
||||||
run: |
|
|
||||||
rm -f "pkgbuilds/${{ steps.prep.outputs.pkg_name }}"
|
|
||||||
|
|
||||||
- name: Create/Update Pull Request
|
|
||||||
id: create-pr
|
|
||||||
if: >-
|
|
||||||
steps.check-label.outputs.hasTopic == 'true' &&
|
|
||||||
steps.check-release.outputs.isLatestRelease == 'true' &&
|
|
||||||
fromJson(steps.download.outputs.downloaded_files)[0]
|
|
||||||
uses: peter-evans/create-pull-request@v7
|
|
||||||
with:
|
|
||||||
add-paths: |
|
|
||||||
pkgbuilds/*
|
|
||||||
token: ${{ secrets.GH_BOT_TOKEN }}
|
|
||||||
commit-message: "chore: Update ${{ github.repository }} to ${{ github.event.release.tag_name }}"
|
|
||||||
branch: bot/bump-${{ github.repository }}-${{ github.event.release.tag_name }}
|
|
||||||
delete-branch: true
|
|
||||||
title: "chore: Update ${{ github.repository }} to ${{ github.event.release.tag_name }}"
|
|
||||||
body: ${{ github.event.release.body }}
|
|
||||||
labels: |
|
|
||||||
auto-approve
|
|
||||||
auto-merge
|
|
||||||
|
|
||||||
- name: Automerge PR
|
|
||||||
env:
|
|
||||||
GH_TOKEN: ${{ secrets.GH_BOT_TOKEN }}
|
|
||||||
if: >-
|
|
||||||
steps.check-label.outputs.hasTopic == 'true' &&
|
|
||||||
steps.check-release.outputs.isLatestRelease == 'true' &&
|
|
||||||
fromJson(steps.download.outputs.downloaded_files)[0]
|
|
||||||
run: |
|
|
||||||
gh pr merge \
|
|
||||||
--auto \
|
|
||||||
--delete-branch \
|
|
||||||
--squash \
|
|
||||||
"${{ steps.create-pr.outputs.pull-request-number }}"
|
|
||||||
71
.github/workflows/update-winget-release.yml
vendored
71
.github/workflows/update-winget-release.yml
vendored
@ -1,71 +0,0 @@
|
|||||||
---
|
|
||||||
# This workflow is centrally managed in https://github.com/<organization>/.github/
|
|
||||||
# Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in
|
|
||||||
# the above-mentioned repo.
|
|
||||||
|
|
||||||
# To use, add the `winget-pkg` repository label to identify repositories that should trigger this workflow.
|
|
||||||
|
|
||||||
# Update Winget on release events.
|
|
||||||
|
|
||||||
name: Update Winget release
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
on:
|
|
||||||
release:
|
|
||||||
types:
|
|
||||||
- released
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: "${{ github.workflow }}-${{ github.event.release.tag_name }}"
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
update-winget-release:
|
|
||||||
if: github.repository_owner == 'LizardByte'
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Check if Winget repo
|
|
||||||
id: check-label
|
|
||||||
env:
|
|
||||||
TOPIC: winget-pkg
|
|
||||||
uses: actions/github-script@v7
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
const topic = process.env.TOPIC;
|
|
||||||
console.log(`Checking if repo has topic: ${topic}`);
|
|
||||||
|
|
||||||
const repoTopics = await github.rest.repos.getAllTopics({
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo
|
|
||||||
});
|
|
||||||
console.log(`Repo topics: ${repoTopics.data.names}`);
|
|
||||||
|
|
||||||
const hasTopic = repoTopics.data.names.includes(topic);
|
|
||||||
console.log(`Has topic: ${hasTopic}`);
|
|
||||||
|
|
||||||
core.setOutput('hasTopic', hasTopic);
|
|
||||||
|
|
||||||
- name: Download release asset
|
|
||||||
id: download
|
|
||||||
if: steps.check-label.outputs.hasTopic == 'true'
|
|
||||||
uses: robinraju/release-downloader@v1.12
|
|
||||||
with:
|
|
||||||
repository: "${{ github.repository }}"
|
|
||||||
tag: "${{ github.event.release.tag_name }}"
|
|
||||||
fileName: "*.exe"
|
|
||||||
tarBall: false
|
|
||||||
zipBall: false
|
|
||||||
out-file-path: "release_downloads"
|
|
||||||
extract: false
|
|
||||||
|
|
||||||
- name: Release to WinGet
|
|
||||||
if: >-
|
|
||||||
steps.check-label.outputs.hasTopic == 'true' &&
|
|
||||||
fromJson(steps.download.outputs.downloaded_files)[0]
|
|
||||||
uses: vedantmgoyal2009/winget-releaser@v2
|
|
||||||
with:
|
|
||||||
identifier: "${{ github.repository_owner }}.${{ github.event.repository.name }}"
|
|
||||||
release-tag: ${{ github.event.release.tag_name }}
|
|
||||||
installers-regex: '\.exe$'
|
|
||||||
token: ${{ secrets.GH_BOT_TOKEN }}
|
|
||||||
Loading…
x
Reference in New Issue
Block a user