Remove bots/workflow
This commit is contained in:
187
.github/ISSUE_TEMPLATE/bug-report.yml
vendored
187
.github/ISSUE_TEMPLATE/bug-report.yml
vendored
@@ -1,187 +0,0 @@
|
|||||||
---
|
|
||||||
name: Bug Report
|
|
||||||
description: Create a bug report to help us improve.
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: >
|
|
||||||
**THIS IS NOT THE PLACE TO ASK FOR SUPPORT!**
|
|
||||||
Please use our [Support Center](https://app.lizardbyte.dev/support) for support issues.
|
|
||||||
Non actionable bug reports will be LOCKED and CLOSED!
|
|
||||||
- type: checkboxes
|
|
||||||
attributes:
|
|
||||||
label: Is there an existing issue for this?
|
|
||||||
description: Please search to see if an issue already exists for the bug you encountered.
|
|
||||||
options:
|
|
||||||
- label: I have searched the existing issues
|
|
||||||
- type: checkboxes
|
|
||||||
attributes:
|
|
||||||
label: Is your issue described in the documentation?
|
|
||||||
description: Please read our [documentation](https://docs.lizardbyte.dev/projects/sunshine)
|
|
||||||
options:
|
|
||||||
- label: I have read the documentation
|
|
||||||
- type: dropdown
|
|
||||||
attributes:
|
|
||||||
label: Is your issue present in the latest beta/pre-release?
|
|
||||||
description: Please test the latest [pre-release](https://github.com/LizardByte/Sunshine/releases).
|
|
||||||
options:
|
|
||||||
- "I didn't read the issue template"
|
|
||||||
- "I'm too lazy to test"
|
|
||||||
- "This issue is present in the latest pre-release"
|
|
||||||
- type: textarea
|
|
||||||
id: description
|
|
||||||
attributes:
|
|
||||||
label: Describe the Bug
|
|
||||||
description: A clear and concise description of the bug, list the reproduction steps.
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: expected
|
|
||||||
attributes:
|
|
||||||
label: Expected Behavior
|
|
||||||
description: A clear and concise description of what you expected to happen.
|
|
||||||
- type: textarea
|
|
||||||
id: additional
|
|
||||||
attributes:
|
|
||||||
label: Additional Context
|
|
||||||
description: Add any other context about the bug here.
|
|
||||||
- type: dropdown
|
|
||||||
id: os
|
|
||||||
attributes:
|
|
||||||
label: Host Operating System
|
|
||||||
description: What version operating system are you running the software on?
|
|
||||||
options:
|
|
||||||
- Docker
|
|
||||||
- Linux
|
|
||||||
- macOS
|
|
||||||
- Windows
|
|
||||||
- other, n/a
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: input
|
|
||||||
id: os-version
|
|
||||||
attributes:
|
|
||||||
label: Operating System Version
|
|
||||||
description: Provide the version of the operating system. Additionally a build number would be helpful.
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: dropdown
|
|
||||||
id: os-architecture
|
|
||||||
attributes:
|
|
||||||
label: Architecture
|
|
||||||
options:
|
|
||||||
- 32 bit
|
|
||||||
- 64 bit
|
|
||||||
- arm
|
|
||||||
- other, n/a
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: input
|
|
||||||
id: version
|
|
||||||
attributes:
|
|
||||||
label: Sunshine commit or version
|
|
||||||
description: |
|
|
||||||
Use `sunshine --verison` to get the version, or get the version from web UI.
|
|
||||||
Please don't just copy the latest commit from our repo, if that's not the commit you're actually using.
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: dropdown
|
|
||||||
id: package_type
|
|
||||||
attributes:
|
|
||||||
label: Package
|
|
||||||
description: The package you installed
|
|
||||||
options:
|
|
||||||
- Linux - AppImage
|
|
||||||
- Linux - AUR (Third Party)
|
|
||||||
- Linux - deb
|
|
||||||
- Linux - Docker
|
|
||||||
- Linux - flathub (Third Party)
|
|
||||||
- Linux - flatpak
|
|
||||||
- Linux - Homebrew
|
|
||||||
- Linux - nixpkgs (Third Party)
|
|
||||||
- Linux - pkg.tar.zst
|
|
||||||
- Linux - rpm
|
|
||||||
- Linux - solus (Third Party)
|
|
||||||
- macOS - Homebrew
|
|
||||||
- macOS - Portfile
|
|
||||||
- Windows - Chocolatey (Third Party)
|
|
||||||
- Windows - installer
|
|
||||||
- Windows - portable
|
|
||||||
- Windows - Scoop (Third Party)
|
|
||||||
- Windows - Winget
|
|
||||||
- other (not listed)
|
|
||||||
- other (self built)
|
|
||||||
- other (fork of this repo)
|
|
||||||
- n/a
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: dropdown
|
|
||||||
id: graphics_type
|
|
||||||
attributes:
|
|
||||||
label: GPU Type
|
|
||||||
description: The type of the installed graphics card.
|
|
||||||
options:
|
|
||||||
- AMD
|
|
||||||
- Intel
|
|
||||||
- Nvidia
|
|
||||||
- none (software encoding)
|
|
||||||
- n/a
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: input
|
|
||||||
id: graphics_model
|
|
||||||
attributes:
|
|
||||||
label: GPU Model
|
|
||||||
description: The model of the installed graphics card.
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: input
|
|
||||||
id: graphics_driver
|
|
||||||
attributes:
|
|
||||||
label: GPU Driver/Mesa Version
|
|
||||||
description: The driver/mesa version of the installed graphics card.
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: dropdown
|
|
||||||
id: capture_method
|
|
||||||
attributes:
|
|
||||||
label: Capture Method
|
|
||||||
description: The capture method being used.
|
|
||||||
options:
|
|
||||||
- AVCaptureScreen (macOS)
|
|
||||||
- KMX (Linux)
|
|
||||||
- NvFBC (Linux)
|
|
||||||
- wlroots (Linux)
|
|
||||||
- X11 (Linux)
|
|
||||||
- Desktop Duplication API (Windows)
|
|
||||||
- Windows.Graphics.Capture (Windows)
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
- type: textarea
|
|
||||||
id: config
|
|
||||||
attributes:
|
|
||||||
label: Config
|
|
||||||
description: |
|
|
||||||
Please copy and paste your config (`sunshine.conf`) file.
|
|
||||||
render: Shell
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: apps
|
|
||||||
attributes:
|
|
||||||
label: Apps
|
|
||||||
description: |
|
|
||||||
If this is an issue with launching a game or app, please copy and paste your `apps.json` file.
|
|
||||||
render: json
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
- type: textarea
|
|
||||||
id: logs
|
|
||||||
attributes:
|
|
||||||
label: Relevant log output
|
|
||||||
description: |
|
|
||||||
Please copy and paste any relevant log output. This will be automatically formatted into code,
|
|
||||||
so no need for backticks.
|
|
||||||
render: shell
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
13
.github/ISSUE_TEMPLATE/config.yml
vendored
13
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -1,13 +0,0 @@
|
|||||||
---
|
|
||||||
# This action 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.
|
|
||||||
|
|
||||||
blank_issues_enabled: false
|
|
||||||
contact_links:
|
|
||||||
- name: Support Center
|
|
||||||
url: https://app.lizardbyte.dev/support
|
|
||||||
about: Official LizardByte support
|
|
||||||
- name: Feature request
|
|
||||||
url: https://ideas.moonlight-stream.org
|
|
||||||
about: Share your suggestions or ideas to help Moonlight and Sunshine improve
|
|
||||||
48
.github/dependabot.yml
vendored
48
.github/dependabot.yml
vendored
@@ -1,48 +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.
|
|
||||||
|
|
||||||
version: 2
|
|
||||||
updates:
|
|
||||||
- package-ecosystem: "docker"
|
|
||||||
directory: "/"
|
|
||||||
schedule:
|
|
||||||
interval: "daily"
|
|
||||||
time: "08:00"
|
|
||||||
open-pull-requests-limit: 10
|
|
||||||
|
|
||||||
- package-ecosystem: "github-actions"
|
|
||||||
directory: "/"
|
|
||||||
schedule:
|
|
||||||
interval: "daily"
|
|
||||||
time: "08:30"
|
|
||||||
open-pull-requests-limit: 10
|
|
||||||
|
|
||||||
- package-ecosystem: "npm"
|
|
||||||
directory: "/"
|
|
||||||
schedule:
|
|
||||||
interval: "daily"
|
|
||||||
time: "09:00"
|
|
||||||
open-pull-requests-limit: 10
|
|
||||||
|
|
||||||
- package-ecosystem: "nuget"
|
|
||||||
directory: "/"
|
|
||||||
schedule:
|
|
||||||
interval: "daily"
|
|
||||||
time: "09:30"
|
|
||||||
open-pull-requests-limit: 10
|
|
||||||
|
|
||||||
- package-ecosystem: "pip"
|
|
||||||
directory: "/"
|
|
||||||
schedule:
|
|
||||||
interval: "daily"
|
|
||||||
time: "10:00"
|
|
||||||
open-pull-requests-limit: 10
|
|
||||||
|
|
||||||
- package-ecosystem: "gitsubmodule"
|
|
||||||
directory: "/"
|
|
||||||
schedule:
|
|
||||||
interval: "daily"
|
|
||||||
time: "10:30"
|
|
||||||
open-pull-requests-limit: 10
|
|
||||||
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.
|
|
||||||
1223
.github/workflows/CI.yml
vendored
1223
.github/workflows/CI.yml
vendored
File diff suppressed because it is too large
Load Diff
385
.github/workflows/ci-docker.yml
vendored
385
.github/workflows/ci-docker.yml
vendored
@@ -1,385 +0,0 @@
|
|||||||
---
|
|
||||||
# This action 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
|
|
||||||
|
|
||||||
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:
|
|
||||||
if: ${{ needs.check_dockerfiles.outputs.dockerfiles }}
|
|
||||||
name: Setup Release
|
|
||||||
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 }}
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Setup Release
|
|
||||||
id: setup_release
|
|
||||||
uses: LizardByte/setup-release-action@v2024.725.234618
|
|
||||||
with:
|
|
||||||
dotnet: ${{ needs.check_dockerfiles.outputs.dotnet }}
|
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
lint_dockerfile:
|
|
||||||
needs: [check_dockerfiles]
|
|
||||||
if: ${{ needs.check_dockerfiles.outputs.dockerfiles }}
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix: ${{ fromJson(needs.check_dockerfiles.outputs.matrix) }}
|
|
||||||
name: Lint Dockerfile${{ matrix.tag }}
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Hadolint
|
|
||||||
id: hadolint
|
|
||||||
uses: hadolint/hadolint-action@v3.1.0
|
|
||||||
with:
|
|
||||||
dockerfile: ${{ matrix.dockerfile }}
|
|
||||||
ignore: DL3008,DL3013,DL3016,DL3018,DL3028,DL3059
|
|
||||||
output-file: ./hadolint.log
|
|
||||||
verbose: true
|
|
||||||
|
|
||||||
- name: Log
|
|
||||||
if: failure()
|
|
||||||
run: |
|
|
||||||
echo "Hadolint outcome: ${{ steps.hadolint.outcome }}" >> $GITHUB_STEP_SUMMARY
|
|
||||||
cat "./hadolint.log" >> $GITHUB_STEP_SUMMARY
|
|
||||||
|
|
||||||
docker:
|
|
||||||
needs: [check_dockerfiles, setup_release]
|
|
||||||
if: ${{ needs.check_dockerfiles.outputs.dockerfiles }}
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
packages: write
|
|
||||||
contents: write
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix: ${{ fromJson(needs.check_dockerfiles.outputs.matrix) }}
|
|
||||||
name: Docker${{ matrix.tag }}
|
|
||||||
|
|
||||||
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: |
|
|
||||||
# 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 ./ -type f -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/
|
|
||||||
|
|
||||||
- name: Create/Update GitHub Release
|
|
||||||
if: ${{ needs.setup_release.outputs.publish_release == 'true' && steps.prepare.outputs.artifacts == 'true' }}
|
|
||||||
uses: LizardByte/create-release-action@v2024.614.221009
|
|
||||||
with:
|
|
||||||
allowUpdates: true
|
|
||||||
artifacts: "*artifacts/*"
|
|
||||||
body: ${{ needs.setup_release.outputs.release_body }}
|
|
||||||
discussionCategory: announcements
|
|
||||||
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
|
|
||||||
214
.github/workflows/codeql.yml
vendored
214
.github/workflows/codeql.yml
vendored
@@ -1,214 +0,0 @@
|
|||||||
---
|
|
||||||
# This action 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"
|
|
||||||
|
|
||||||
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
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
outputs:
|
|
||||||
matrix: ${{ steps.lang.outputs.result }}
|
|
||||||
continue: ${{ steps.continue.outputs.result }}
|
|
||||||
steps:
|
|
||||||
- name: Get repo languages
|
|
||||||
uses: actions/github-script@v7
|
|
||||||
id: lang
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
// CodeQL supports ['cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby', 'swift']
|
|
||||||
// Use only 'java' to analyze code written in Java, Kotlin or both
|
|
||||||
// Use only 'javascript' to analyze code written in JavaScript, TypeScript or both
|
|
||||||
// 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#': 'csharp',
|
|
||||||
'kotlin': 'java',
|
|
||||||
'typescript': 'javascript',
|
|
||||||
}
|
|
||||||
|
|
||||||
const repo = context.repo
|
|
||||||
const response = await github.rest.repos.listLanguages(repo)
|
|
||||||
let matrix = {
|
|
||||||
"include": []
|
|
||||||
}
|
|
||||||
|
|
||||||
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()]
|
|
||||||
}
|
|
||||||
if (supported_languages.includes(key.toLowerCase())) {
|
|
||||||
console.log(`Found supported language: ${key}`)
|
|
||||||
let osList = ['ubuntu-latest'];
|
|
||||||
if (key.toLowerCase() === 'swift') {
|
|
||||||
osList = ['macos-latest'];
|
|
||||||
} else if (key.toLowerCase() === 'cpp') {
|
|
||||||
// TODO: update macos to latest after the below issue is resolved
|
|
||||||
// https://github.com/github/codeql-action/issues/2266
|
|
||||||
osList = ['macos-13', 'ubuntu-latest', 'windows-latest'];
|
|
||||||
}
|
|
||||||
for (let os of osList) {
|
|
||||||
// set name for matrix
|
|
||||||
if (osList.length == 1) {
|
|
||||||
name = key.toLowerCase()
|
|
||||||
} else {
|
|
||||||
name = `${key.toLowerCase()}, ${os}`
|
|
||||||
}
|
|
||||||
|
|
||||||
// add to matrix
|
|
||||||
matrix['include'].push({"language": key.toLowerCase(), "os": os, "name": name})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// print languages
|
|
||||||
console.log(`matrix: ${JSON.stringify(matrix)}`)
|
|
||||||
|
|
||||||
return matrix
|
|
||||||
|
|
||||||
- name: Continue
|
|
||||||
uses: actions/github-script@v7
|
|
||||||
id: continue
|
|
||||||
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' }}
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
shell: ${{ matrix.os == 'windows-latest' && 'msys2 {0}' || 'bash' }}
|
|
||||||
env:
|
|
||||||
GITHUB_CODEQL_BUILD: true
|
|
||||||
needs: [languages]
|
|
||||||
runs-on: ${{ matrix.os || 'ubuntu-latest' }}
|
|
||||||
timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }}
|
|
||||||
permissions:
|
|
||||||
actions: read
|
|
||||||
contents: read
|
|
||||||
security-events: write
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix: ${{ fromJson(needs.languages.outputs.matrix) }}
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Maximize build space
|
|
||||||
if: >-
|
|
||||||
runner.os == 'Linux' &&
|
|
||||||
matrix.language == 'cpp'
|
|
||||||
uses: easimon/maximize-build-space@v10
|
|
||||||
with:
|
|
||||||
root-reserve-mb: 30720
|
|
||||||
remove-dotnet: ${{ (matrix.language == 'csharp' && 'false') || 'true' }}
|
|
||||||
remove-android: 'true'
|
|
||||||
remove-haskell: 'true'
|
|
||||||
remove-codeql: 'false'
|
|
||||||
remove-docker-images: 'true'
|
|
||||||
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: recursive
|
|
||||||
|
|
||||||
- name: Setup msys2
|
|
||||||
if: >-
|
|
||||||
runner.os == 'Windows' &&
|
|
||||||
matrix.language == 'cpp'
|
|
||||||
uses: msys2/setup-msys2@v2
|
|
||||||
with:
|
|
||||||
msystem: ucrt64
|
|
||||||
update: true
|
|
||||||
|
|
||||||
# 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
|
|
||||||
|
|
||||||
# Pre autobuild
|
|
||||||
# create a file named .codeql-prebuild-${{ matrix.language }}.sh in the root of your repository
|
|
||||||
# create a file named .codeql-build-${{ matrix.language }}.sh in the root of your repository
|
|
||||||
- name: Prebuild
|
|
||||||
id: prebuild
|
|
||||||
run: |
|
|
||||||
# check if prebuild script exists
|
|
||||||
filename=".codeql-prebuild-${{ matrix.language }}-${{ runner.os }}.sh"
|
|
||||||
if [ -f "./${filename}" ]; then
|
|
||||||
echo "Running prebuild script: ${filename}"
|
|
||||||
./${filename}
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift).
|
|
||||||
- name: Autobuild
|
|
||||||
if: steps.prebuild.outputs.skip_autobuild != 'true'
|
|
||||||
uses: github/codeql-action/autobuild@v3
|
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
|
||||||
uses: github/codeql-action/analyze@v3
|
|
||||||
with:
|
|
||||||
category: "/language:${{matrix.language}}"
|
|
||||||
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:
|
|
||||||
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
|
|
||||||
retention-days: 1
|
|
||||||
120
.github/workflows/cpp-lint.yml
vendored
120
.github/workflows/cpp-lint.yml
vendored
@@ -1,120 +0,0 @@
|
|||||||
---
|
|
||||||
# This action 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.
|
|
||||||
|
|
||||||
# Lint c++ source files and cmake files.
|
|
||||||
|
|
||||||
name: C++ Lint
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
branches: [master]
|
|
||||||
types: [opened, synchronize, reopened]
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: "${{ github.workflow }}-${{ github.ref }}"
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
clang-format:
|
|
||||||
name: Clang Format Lint
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Find cpp files
|
|
||||||
id: find_files
|
|
||||||
run: |
|
|
||||||
# find files
|
|
||||||
found_files=$(find . -type f -iname "*.cpp" -o -iname "*.h" -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: Clang format lint
|
|
||||||
if: ${{ steps.find_files.outputs.found_files }}
|
|
||||||
uses: DoozyX/clang-format-lint-action@v0.17
|
|
||||||
with:
|
|
||||||
source: ${{ steps.find_files.outputs.found_files }}
|
|
||||||
extensions: 'cpp,h,m,mm'
|
|
||||||
clangFormatVersion: 16
|
|
||||||
style: file
|
|
||||||
inplace: false
|
|
||||||
|
|
||||||
- name: Upload Artifacts
|
|
||||||
if: failure()
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: clang-format-fixes
|
|
||||||
path: ${{ steps.find_files.outputs.found_files }}
|
|
||||||
|
|
||||||
cmake-lint:
|
|
||||||
name: CMake 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.11'
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: |
|
|
||||||
python -m pip install --upgrade pip setuptools cmakelang
|
|
||||||
|
|
||||||
- name: Find cmake files
|
|
||||||
id: find_files
|
|
||||||
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: Test with cmake-lint
|
|
||||||
run: |
|
|
||||||
cmake-lint --line-width 120 --tab-size 4 ${{ steps.find_files.outputs.found_files }}
|
|
||||||
25
.github/workflows/issues.yml
vendored
25
.github/workflows/issues.yml
vendored
@@ -1,25 +0,0 @@
|
|||||||
---
|
|
||||||
# This action 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.
|
|
||||||
|
|
||||||
# Label and un-label actions using `../label-actions.yml`.
|
|
||||||
|
|
||||||
name: Issues
|
|
||||||
|
|
||||||
on:
|
|
||||||
issues:
|
|
||||||
types: [labeled, unlabeled]
|
|
||||||
discussion:
|
|
||||||
types: [labeled, unlabeled]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
label:
|
|
||||||
name: Label Actions
|
|
||||||
if: startsWith(github.repository, 'LizardByte/')
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Label Actions
|
|
||||||
uses: dessant/label-actions@v4
|
|
||||||
with:
|
|
||||||
github-token: ${{ secrets.GH_BOT_TOKEN }}
|
|
||||||
98
.github/workflows/localize.yml
vendored
98
.github/workflows/localize.yml
vendored
@@ -1,98 +0,0 @@
|
|||||||
---
|
|
||||||
name: localize
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [master]
|
|
||||||
paths: # prevents workflow from running unless these files change
|
|
||||||
- '.github/workflows/localize.yml'
|
|
||||||
- 'src/**'
|
|
||||||
- 'locale/sunshine.po'
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
env:
|
|
||||||
file: ./locale/sunshine.po
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
localize:
|
|
||||||
name: Update Localization
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Install Python 3.9
|
|
||||||
uses: actions/setup-python@v5 # https://github.com/actions/setup-python
|
|
||||||
with:
|
|
||||||
python-version: '3.9'
|
|
||||||
|
|
||||||
- name: Set up Python 3.9 Dependencies
|
|
||||||
run: |
|
|
||||||
cd ./scripts
|
|
||||||
python -m pip install --upgrade pip setuptools
|
|
||||||
python -m pip install -r requirements.txt
|
|
||||||
|
|
||||||
- name: Set up xgettext
|
|
||||||
run: |
|
|
||||||
sudo apt-get update -y && \
|
|
||||||
sudo apt-get --reinstall install -y \
|
|
||||||
gettext
|
|
||||||
|
|
||||||
- name: Update Strings
|
|
||||||
run: |
|
|
||||||
# first, try to remove existing file as xgettext does not remove unused translations
|
|
||||||
if [ -f "${{ env.file }}" ];
|
|
||||||
then
|
|
||||||
rm ${{ env.file }}
|
|
||||||
echo "new_file=false" >> $GITHUB_ENV
|
|
||||||
else
|
|
||||||
echo "new_file=true" >> $GITHUB_ENV
|
|
||||||
fi
|
|
||||||
|
|
||||||
# extract the new strings
|
|
||||||
python ./scripts/_locale.py --extract
|
|
||||||
|
|
||||||
- name: git diff
|
|
||||||
if: ${{ env.new_file == 'false' }}
|
|
||||||
run: |
|
|
||||||
# disable the pager
|
|
||||||
git config --global pager.diff false
|
|
||||||
|
|
||||||
# print the git diff
|
|
||||||
git diff locale/sunshine.po
|
|
||||||
|
|
||||||
# set the variable with minimal output, replacing `\t` with ` `
|
|
||||||
OUTPUT=$(git diff --numstat locale/sunshine.po | sed -e "s#\t# #g")
|
|
||||||
echo "git_diff=${OUTPUT}" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: git reset
|
|
||||||
# only run if a single line changed (date/time) and file already existed
|
|
||||||
if: ${{ env.git_diff == '1 1 locale/sunshine.po' && env.new_file == 'false' }}
|
|
||||||
run: |
|
|
||||||
git reset --hard
|
|
||||||
|
|
||||||
- name: Get current date
|
|
||||||
id: date
|
|
||||||
run: echo "date=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Create/Update Pull Request
|
|
||||||
uses: peter-evans/create-pull-request@v6
|
|
||||||
with:
|
|
||||||
add-paths: |
|
|
||||||
locale/*.po
|
|
||||||
token: ${{ secrets.GH_BOT_TOKEN }} # must trigger PR tests
|
|
||||||
commit-message: New localization template
|
|
||||||
branch: localize/update
|
|
||||||
delete-branch: true
|
|
||||||
base: master
|
|
||||||
title: New Babel Updates
|
|
||||||
body: |
|
|
||||||
Update report
|
|
||||||
- Updated ${{ steps.date.outputs.date }}
|
|
||||||
- Auto-generated by [create-pull-request][1]
|
|
||||||
|
|
||||||
[1]: https://github.com/peter-evans/create-pull-request
|
|
||||||
labels: |
|
|
||||||
babel
|
|
||||||
l10n
|
|
||||||
38
.github/workflows/python-flake8.yml
vendored
38
.github/workflows/python-flake8.yml
vendored
@@ -1,38 +0,0 @@
|
|||||||
---
|
|
||||||
# This action 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.
|
|
||||||
|
|
||||||
# Lint python files with flake8.
|
|
||||||
|
|
||||||
name: flake8
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
branches: [master]
|
|
||||||
types: [opened, synchronize, reopened]
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: "${{ github.workflow }}-${{ github.ref }}"
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
flake8:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Set up Python
|
|
||||||
uses: actions/setup-python@v5 # https://github.com/actions/setup-python
|
|
||||||
with:
|
|
||||||
python-version: '3.10'
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: |
|
|
||||||
# pin flake8 before v6.0.0 due to removal of support for type comments (required for Python 2.7 type hints)
|
|
||||||
python -m pip install --upgrade pip setuptools "flake8<6"
|
|
||||||
|
|
||||||
- name: Test with flake8
|
|
||||||
run: |
|
|
||||||
python -m flake8 --verbose
|
|
||||||
27
.github/workflows/release-notifier-moonlight.yml
vendored
27
.github/workflows/release-notifier-moonlight.yml
vendored
@@ -1,27 +0,0 @@
|
|||||||
---
|
|
||||||
name: Release Notifications (Moonlight)
|
|
||||||
|
|
||||||
on:
|
|
||||||
release:
|
|
||||||
types:
|
|
||||||
- released # this triggers when a release is published, but does not include prereleases or drafts
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
discord:
|
|
||||||
if: >-
|
|
||||||
startsWith(github.repository, 'LizardByte/') &&
|
|
||||||
!github.event.release.prerelease &&
|
|
||||||
!github.event.release.draft
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: discord
|
|
||||||
uses: sarisia/actions-status-discord@v1 # https://github.com/sarisia/actions-status-discord
|
|
||||||
with:
|
|
||||||
webhook: ${{ secrets.DISCORD_RELEASE_WEBHOOK_MOONLIGHT }}
|
|
||||||
nodetail: true
|
|
||||||
nofail: false
|
|
||||||
username: ${{ secrets.DISCORD_USERNAME }}
|
|
||||||
avatar_url: ${{ secrets.ORG_LOGO_URL }}
|
|
||||||
title: ${{ github.event.repository.name }} ${{ github.ref_name }} Released
|
|
||||||
description: ${{ github.event.release.body }}
|
|
||||||
color: 0xFF4500
|
|
||||||
127
.github/workflows/release-notifier.yml
vendored
127
.github/workflows/release-notifier.yml
vendored
@@ -1,127 +0,0 @@
|
|||||||
---
|
|
||||||
# This action 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.
|
|
||||||
|
|
||||||
# Send release notification to various platforms.
|
|
||||||
|
|
||||||
name: Release Notifications
|
|
||||||
|
|
||||||
on:
|
|
||||||
release:
|
|
||||||
types:
|
|
||||||
- released # this triggers when a release is published, but does not include pre-releases or drafts
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
simplified_changelog:
|
|
||||||
if: >-
|
|
||||||
startsWith(github.repository, 'LizardByte/') &&
|
|
||||||
!github.event.release.prerelease &&
|
|
||||||
!github.event.release.draft
|
|
||||||
outputs:
|
|
||||||
SIMPLIFIED_BODY: ${{ steps.output.outputs.SIMPLIFIED_BODY }}
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: remove contributors section
|
|
||||||
env:
|
|
||||||
RELEASE_BODY: ${{ github.event.release.body }}
|
|
||||||
id: output
|
|
||||||
run: |
|
|
||||||
echo "${RELEASE_BODY}" > ./release_body.md
|
|
||||||
modified_body=$(sed '/^---$/d; /^## Contributors$/,/<\/a>/d' ./release_body.md)
|
|
||||||
echo "modified_body: ${modified_body}"
|
|
||||||
|
|
||||||
# use a heredoc to ensure the output is multiline
|
|
||||||
echo "SIMPLIFIED_BODY<<EOF" >> $GITHUB_OUTPUT
|
|
||||||
echo "${modified_body}" >> $GITHUB_OUTPUT
|
|
||||||
echo "EOF" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
discord:
|
|
||||||
if: >-
|
|
||||||
startsWith(github.repository, 'LizardByte/') &&
|
|
||||||
!github.event.release.prerelease &&
|
|
||||||
!github.event.release.draft
|
|
||||||
needs: simplified_changelog
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: discord
|
|
||||||
uses: sarisia/actions-status-discord@v1
|
|
||||||
with:
|
|
||||||
avatar_url: ${{ secrets.ORG_LOGO_URL }}
|
|
||||||
color: 0x00ff00
|
|
||||||
description: ${{ needs.simplified_changelog.outputs.SIMPLIFIED_BODY }}
|
|
||||||
nodetail: true
|
|
||||||
nofail: false
|
|
||||||
title: ${{ github.event.repository.name }} ${{ github.ref_name }} Released
|
|
||||||
url: ${{ github.event.release.html_url }}
|
|
||||||
username: ${{ secrets.DISCORD_USERNAME }}
|
|
||||||
webhook: ${{ secrets.DISCORD_RELEASE_WEBHOOK }}
|
|
||||||
|
|
||||||
facebook_group:
|
|
||||||
if: >-
|
|
||||||
startsWith(github.repository, 'LizardByte/') &&
|
|
||||||
!github.event.release.prerelease &&
|
|
||||||
!github.event.release.draft
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: facebook-post-action
|
|
||||||
uses: ReenigneArcher/facebook-post-action@v1
|
|
||||||
with:
|
|
||||||
page_id: ${{ secrets.FACEBOOK_GROUP_ID }}
|
|
||||||
access_token: ${{ secrets.FACEBOOK_ACCESS_TOKEN }}
|
|
||||||
message: |
|
|
||||||
${{ github.event.repository.name }} ${{ github.ref_name }} Released
|
|
||||||
url: ${{ github.event.release.html_url }}
|
|
||||||
|
|
||||||
facebook_page:
|
|
||||||
if: >-
|
|
||||||
startsWith(github.repository, 'LizardByte/') &&
|
|
||||||
!github.event.release.prerelease &&
|
|
||||||
!github.event.release.draft
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: facebook-post-action
|
|
||||||
uses: ReenigneArcher/facebook-post-action@v1
|
|
||||||
with:
|
|
||||||
page_id: ${{ secrets.FACEBOOK_PAGE_ID }}
|
|
||||||
access_token: ${{ secrets.FACEBOOK_ACCESS_TOKEN }}
|
|
||||||
message: |
|
|
||||||
${{ github.event.repository.name }} ${{ github.ref_name }} Released
|
|
||||||
url: ${{ github.event.release.html_url }}
|
|
||||||
|
|
||||||
reddit:
|
|
||||||
if: >-
|
|
||||||
startsWith(github.repository, 'LizardByte/') &&
|
|
||||||
!github.event.release.prerelease &&
|
|
||||||
!github.event.release.draft
|
|
||||||
needs: simplified_changelog
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: reddit
|
|
||||||
uses: bluwy/release-for-reddit-action@v2
|
|
||||||
with:
|
|
||||||
username: ${{ secrets.REDDIT_USERNAME }}
|
|
||||||
password: ${{ secrets.REDDIT_PASSWORD }}
|
|
||||||
app-id: ${{ secrets.REDDIT_CLIENT_ID }}
|
|
||||||
app-secret: ${{ secrets.REDDIT_CLIENT_SECRET }}
|
|
||||||
subreddit: ${{ secrets.REDDIT_SUBREDDIT }}
|
|
||||||
title: ${{ github.event.repository.name }} ${{ github.ref_name }} Released
|
|
||||||
url: ${{ github.event.release.html_url }}
|
|
||||||
flair-id: ${{ secrets.REDDIT_FLAIR_ID }} # https://www.reddit.com/r/<subreddit>>/api/link_flair.json
|
|
||||||
comment: ${{ needs.simplified_changelog.outputs.SIMPLIFIED_BODY }}
|
|
||||||
|
|
||||||
x:
|
|
||||||
if: >-
|
|
||||||
startsWith(github.repository, 'LizardByte/') &&
|
|
||||||
!github.event.release.prerelease &&
|
|
||||||
!github.event.release.draft
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: x
|
|
||||||
uses: nearform-actions/github-action-notify-twitter@v1
|
|
||||||
with:
|
|
||||||
message: ${{ github.event.release.html_url }}
|
|
||||||
twitter-app-key: ${{ secrets.X_APP_KEY }}
|
|
||||||
twitter-app-secret: ${{ secrets.X_APP_SECRET }}
|
|
||||||
twitter-access-token: ${{ secrets.X_ACCESS_TOKEN }}
|
|
||||||
twitter-access-token-secret: ${{ secrets.X_ACCESS_TOKEN_SECRET }}
|
|
||||||
31
.github/workflows/update-changelog.yml
vendored
31
.github/workflows/update-changelog.yml
vendored
@@ -1,31 +0,0 @@
|
|||||||
---
|
|
||||||
# This action 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.
|
|
||||||
|
|
||||||
# Update changelog on release events.
|
|
||||||
|
|
||||||
name: Update changelog
|
|
||||||
|
|
||||||
on:
|
|
||||||
release:
|
|
||||||
types: [created, edited, deleted]
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: "${{ github.workflow }}"
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
update-changelog:
|
|
||||||
if: >-
|
|
||||||
github.event_name == 'workflow_dispatch' ||
|
|
||||||
(!github.event.release.prerelease && !github.event.release.draft)
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Update Changelog
|
|
||||||
uses: LizardByte/update-changelog-action@v2024.609.4705
|
|
||||||
with:
|
|
||||||
changelogBranch: changelog
|
|
||||||
changelogFile: CHANGELOG.md
|
|
||||||
token: ${{ secrets.GH_BOT_TOKEN }}
|
|
||||||
89
.github/workflows/update-docs.yml
vendored
89
.github/workflows/update-docs.yml
vendored
@@ -1,89 +0,0 @@
|
|||||||
---
|
|
||||||
# This action 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.
|
|
||||||
|
|
||||||
# Use the `rtd` repository label to identify repositories that should trigger have 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
|
|
||||||
|
|
||||||
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}')
|
|
||||||
|
|
||||||
curl \
|
|
||||||
-X PATCH \
|
|
||||||
-H "Authorization: Token ${RTD_TOKEN}" \
|
|
||||||
https://readthedocs.org/api/v3/projects/${RTD_SLUG}/ \
|
|
||||||
-H "Content-Type: application/json" \
|
|
||||||
-d "$json_body"
|
|
||||||
71
.github/workflows/update-homebrew-release.yml
vendored
71
.github/workflows/update-homebrew-release.yml
vendored
@@ -1,71 +0,0 @@
|
|||||||
---
|
|
||||||
# This action is a candidate to centrally manage in https://github.com/<organization>/.github/
|
|
||||||
# If more Homebrew applications are developed, consider moving this action to the organization's .github repository,
|
|
||||||
# using the `homebrew-pkg` repository label to identify repositories that should trigger this workflow.
|
|
||||||
|
|
||||||
# Update Homebrew on release events.
|
|
||||||
|
|
||||||
name: Update Homebrew release
|
|
||||||
|
|
||||||
on:
|
|
||||||
release:
|
|
||||||
types: [created, edited]
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: "${{ github.workflow }}-${{ github.event.release.tag_name }}"
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
update-homebrew-release:
|
|
||||||
if: >-
|
|
||||||
github.repository_owner == 'LizardByte' &&
|
|
||||||
!github.event.release.draft && !github.event.release.prerelease
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Check if Homebrew repo
|
|
||||||
env:
|
|
||||||
TOPIC: homebrew-pkg
|
|
||||||
id: check
|
|
||||||
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.outputs.hasTopic == 'true'
|
|
||||||
uses: robinraju/release-downloader@v1.11
|
|
||||||
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.outputs.hasTopic == 'true' &&
|
|
||||||
fromJson(steps.download.outputs.downloaded_files)[0]
|
|
||||||
uses: LizardByte/homebrew-release-action@v2024.612.21058
|
|
||||||
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
|
|
||||||
110
.github/workflows/update-pacman-repo.yml
vendored
110
.github/workflows/update-pacman-repo.yml
vendored
@@ -1,110 +0,0 @@
|
|||||||
---
|
|
||||||
# This action is a candidate to centrally manage in https://github.com/<organization>/.github/
|
|
||||||
# If more pacman packages are developed, consider moving this action to the organization's .github repository,
|
|
||||||
# using the `pacman-pkg` repository label to identify repositories that should trigger have this workflow.
|
|
||||||
|
|
||||||
# Update pacman repo on release events.
|
|
||||||
|
|
||||||
name: Update pacman repo
|
|
||||||
|
|
||||||
on:
|
|
||||||
release:
|
|
||||||
types: [created, edited]
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: "${{ github.workflow }}-${{ github.event.release.tag_name }}"
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
update-homebrew-release:
|
|
||||||
if: >-
|
|
||||||
github.repository_owner == 'LizardByte' &&
|
|
||||||
!github.event.release.draft && !github.event.release.prerelease
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Check if pacman repo
|
|
||||||
env:
|
|
||||||
TOPIC: pacman-pkg
|
|
||||||
id: check
|
|
||||||
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 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: Checkout pacman-repo
|
|
||||||
if: >-
|
|
||||||
steps.check.outputs.hasTopic == 'true' &&
|
|
||||||
steps.check.outputs.isLatestRelease == 'true'
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
repository: ${{ github.repository_owner }}/pacman-repo
|
|
||||||
|
|
||||||
- name: Prep
|
|
||||||
id: prep
|
|
||||||
if: >-
|
|
||||||
steps.check.outputs.hasTopic == 'true' &&
|
|
||||||
steps.check.outputs.isLatestRelease == 'true'
|
|
||||||
run: |
|
|
||||||
echo "pkg_name=$(echo ${{ github.repository }} | tr '[:upper:]' '[:lower:]')" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Download release asset
|
|
||||||
id: download
|
|
||||||
if: >-
|
|
||||||
steps.check.outputs.hasTopic == 'true' &&
|
|
||||||
steps.check.outputs.isLatestRelease == 'true'
|
|
||||||
uses: robinraju/release-downloader@v1.11
|
|
||||||
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: Create/Update Pull Request
|
|
||||||
if: >-
|
|
||||||
steps.check.outputs.hasTopic == 'true'&&
|
|
||||||
steps.check.outputs.isLatestRelease == 'true' &&
|
|
||||||
fromJson(steps.download.outputs.downloaded_files)[0]
|
|
||||||
uses: peter-evans/create-pull-request@v6
|
|
||||||
with:
|
|
||||||
add-paths: |
|
|
||||||
pkgbuilds/*
|
|
||||||
token: ${{ secrets.GH_BOT_TOKEN }}
|
|
||||||
commit-message: Update ${{ github.repository }} to ${{ github.event.release.tag_name }}
|
|
||||||
branch: bot/bump-${{ github.repository }}-${{ github.event.release.tag_name }}
|
|
||||||
delete-branch: true
|
|
||||||
base: master
|
|
||||||
title: Update ${{ github.repository }} to ${{ github.event.release.tag_name }}
|
|
||||||
body: ${{ github.event.release.body }}
|
|
||||||
labels: |
|
|
||||||
auto-approve
|
|
||||||
auto-merge
|
|
||||||
62
.github/workflows/update-pages.yml
vendored
62
.github/workflows/update-pages.yml
vendored
@@ -1,62 +0,0 @@
|
|||||||
---
|
|
||||||
name: Build GH-Pages
|
|
||||||
|
|
||||||
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:
|
|
||||||
update_pages:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Checkout gh-pages
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
ref: gh-pages
|
|
||||||
path: gh-pages
|
|
||||||
persist-credentials: false # otherwise, the token used is the GITHUB_TOKEN, instead of the personal token
|
|
||||||
fetch-depth: 0 # otherwise, will fail to push refs to dest repo
|
|
||||||
|
|
||||||
- name: Prepare gh-pages
|
|
||||||
run: |
|
|
||||||
# empty contents
|
|
||||||
rm -f -r ./gh-pages/*
|
|
||||||
|
|
||||||
# copy template back to pages
|
|
||||||
cp -f -r ./gh-pages-template/. ./gh-pages/
|
|
||||||
|
|
||||||
- name: Upload Artifacts
|
|
||||||
if: ${{ github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' }}
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: gh-pages
|
|
||||||
if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn`
|
|
||||||
path: |
|
|
||||||
${{ github.workspace }}/gh-pages
|
|
||||||
!**/*.git
|
|
||||||
|
|
||||||
- name: Deploy to gh-pages
|
|
||||||
if: >-
|
|
||||||
(github.event_name == 'push' && github.ref == 'refs/heads/master') ||
|
|
||||||
(github.event_name == 'workflow_dispatch')
|
|
||||||
uses: actions-js/push@v1.5
|
|
||||||
with:
|
|
||||||
github_token: ${{ secrets.GH_BOT_TOKEN }}
|
|
||||||
author_email: ${{ secrets.GH_BOT_EMAIL }}
|
|
||||||
author_name: ${{ secrets.GH_BOT_NAME }}
|
|
||||||
directory: gh-pages
|
|
||||||
branch: gh-pages
|
|
||||||
force: false
|
|
||||||
message: sync gh-pages to ${{ github.sha }}
|
|
||||||
69
.github/workflows/update-winget-release.yml
vendored
69
.github/workflows/update-winget-release.yml
vendored
@@ -1,69 +0,0 @@
|
|||||||
---
|
|
||||||
# This action is a candidate to centrally manage in https://github.com/<organization>/.github/
|
|
||||||
# If more Winget applications are developed, consider moving this action to the organization's .github repository,
|
|
||||||
# using the `winget-pkg` repository label to identify repositories that should trigger this workflow.
|
|
||||||
|
|
||||||
# Update Winget on release events.
|
|
||||||
|
|
||||||
name: Update Winget release
|
|
||||||
|
|
||||||
on:
|
|
||||||
release:
|
|
||||||
types: [created, edited]
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: "${{ github.workflow }}-${{ github.event.release.tag_name }}"
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
update-winget-release:
|
|
||||||
if: >-
|
|
||||||
github.repository_owner == 'LizardByte' &&
|
|
||||||
!github.event.release.draft && !github.event.release.prerelease
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Check if Winget repo
|
|
||||||
env:
|
|
||||||
TOPIC: winget-pkg
|
|
||||||
id: check
|
|
||||||
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.outputs.hasTopic == 'true'
|
|
||||||
uses: robinraju/release-downloader@v1.11
|
|
||||||
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.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 }}
|
|
||||||
66
.github/workflows/yaml-lint.yml
vendored
66
.github/workflows/yaml-lint.yml
vendored
@@ -1,66 +0,0 @@
|
|||||||
---
|
|
||||||
# This action 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.
|
|
||||||
|
|
||||||
# Lint yaml files.
|
|
||||||
|
|
||||||
name: yaml lint
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
branches: [master]
|
|
||||||
types: [opened, synchronize, reopened]
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: "${{ github.workflow }}-${{ github.ref }}"
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
yaml-lint:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Find additional files
|
|
||||||
id: find-files
|
|
||||||
run: |
|
|
||||||
# space separated list of files
|
|
||||||
FILES=.clang-format
|
|
||||||
|
|
||||||
# empty placeholder
|
|
||||||
FOUND=""
|
|
||||||
|
|
||||||
for FILE in ${FILES}; do
|
|
||||||
if [ -f "$FILE" ]
|
|
||||||
then
|
|
||||||
FOUND="$FOUND $FILE"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "found=${FOUND}" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: yaml lint
|
|
||||||
id: yaml-lint
|
|
||||||
uses: ibiqlik/action-yamllint@v3
|
|
||||||
with:
|
|
||||||
# https://yamllint.readthedocs.io/en/stable/configuration.html#default-configuration
|
|
||||||
config_data: |
|
|
||||||
extends: default
|
|
||||||
rules:
|
|
||||||
comments:
|
|
||||||
level: error
|
|
||||||
line-length:
|
|
||||||
max: 120
|
|
||||||
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.find-files.outputs.found }}
|
|
||||||
|
|
||||||
- name: Log
|
|
||||||
run: |
|
|
||||||
cat "${{ steps.yaml-lint.outputs.logfile }}" >> $GITHUB_STEP_SUMMARY
|
|
||||||
Reference in New Issue
Block a user