diff --git a/.github/ISSUE_TEMPLATE/1-quality-mod.md b/.github/ISSUE_TEMPLATE/1-quality-mod.md deleted file mode 100644 index d00a4ba..0000000 --- a/.github/ISSUE_TEMPLATE/1-quality-mod.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -name: "Quality Guidelines" -about: "Feedback or support regarding Flathub Quality Guidelines" -title: "Quality guideline problems for " ---- - - - - - -### Flathub store page link - - - -### Questions or Feedback diff --git a/.github/ISSUE_TEMPLATE/2-blank.md b/.github/ISSUE_TEMPLATE/2-blank.md deleted file mode 100644 index 583f728..0000000 --- a/.github/ISSUE_TEMPLATE/2-blank.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -name: "Others" -about: "General support or issues" ---- diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index 0086358..0000000 --- a/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1 +0,0 @@ -blank_issues_enabled: true diff --git a/.github/actions/flatpak-external-data-checker/Dockerfile b/.github/actions/flatpak-external-data-checker/Dockerfile deleted file mode 100644 index 8b63319..0000000 --- a/.github/actions/flatpak-external-data-checker/Dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM ghcr.io/flathub/flatpak-external-data-checker:latest - -RUN apt-get update && \ - apt-get install -y gh jq parallel curl && \ - apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* - -ADD gh-ls-org /usr/local/bin/gh-ls-org -ADD entrypoint.sh /entrypoint.sh - -ENTRYPOINT ["/entrypoint.sh"] diff --git a/.github/actions/flatpak-external-data-checker/entrypoint.sh b/.github/actions/flatpak-external-data-checker/entrypoint.sh deleted file mode 100755 index c50578d..0000000 --- a/.github/actions/flatpak-external-data-checker/entrypoint.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/bin/bash - -if [[ -z "$GITHUB_WORKSPACE" || -z "$GITHUB_REPOSITORY" ]]; then - echo "Script is not running in GitHub Actions CI" - exit 1 -fi - -git config --global user.name "flathubbot" && \ -git config --global user.email "sysadmin@flathub.org" - -mkdir flathub -cd flathub || exit - -gh repo list flathub --visibility public -L 8000 --json url --json isArchived --jq '.[] | select(.isArchived == false)|.url' | parallel "git clone --depth 1 {}" - -echo "==> Deleting inactive repos" -base_url="https://raw.githubusercontent.com/flathub-infra/flathub-inactive-repo-list/refs/heads/main/" -for file in inactive.txt manual_inactive.txt; do - curl -s "${base_url}${file}" | while read folder; do - test -d "$folder" && echo "==> Deleting $folder" && rm -rf "$folder" || true - done -done - -mapfile -t checker_apps < <( grep -rl -E 'extra-data|x-checker-data|\.AppImage' | cut -d/ -f1 | sort -u | shuf ) - -for repo in "${checker_apps[@]}"; do - FEDC_OPTS=() - - if [[ -f $repo/flathub.json ]]; then - # check if repo opted out - if ! jq -e '."disable-external-data-checker" | not' < "$repo"/flathub.json > /dev/null; then - continue - fi - # check if the app is EOL - if ! jq -e '."end-of-life" or ."end-of-life-rebase" | not' < "$repo"/flathub.json > /dev/null; then - continue - fi - # add repo-specified f-e-d-c args - if jq -e '."require-important-update"' < "$repo"/flathub.json > /dev/null; then - FEDC_OPTS+=("--require-important-update") - fi - # disable sending PRs and only commit - if jq -e '."fedc-commit-only" == true' < "$repo"/flathub.json > /dev/null; then - FEDC_OPTS+=("--commit-only") - fi - fi - - if [[ -f $repo/${repo}.yml ]]; then - manifest=${repo}.yml - elif [[ -f $repo/${repo}.yaml ]]; then - manifest=${repo}.yaml - elif [[ -f $repo/${repo}.json ]]; then - manifest=${repo}.json - else - continue - fi - - echo "==> checking ${repo}" - /app/flatpak-external-data-checker --verbose --update "${FEDC_OPTS[@]}" "$repo/$manifest" || true -done diff --git a/.github/actions/flatpak-external-data-checker/gh-ls-org b/.github/actions/flatpak-external-data-checker/gh-ls-org deleted file mode 100755 index d23a693..0000000 --- a/.github/actions/flatpak-external-data-checker/gh-ls-org +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/python3 - -import argparse -import os - -import github - -if __name__ == "__main__": - usage = ( - "lists repositories belonging to github organization\n" - "example: gh-ls-org foobar | xargs -P4 -L1 git clone --recursive" - ) - parser = argparse.ArgumentParser(usage=usage) - parser.add_argument("organization", help="name of github organization") - args = parser.parse_args() - - github_token = os.environ["GITHUB_TOKEN"] - g = github.Github(github_token, per_page=200) - - org = g.get_organization(args.organization) - - for repo in org.get_repos(): - if not repo.archived: - print(repo.html_url) diff --git a/.github/images/pr_image_dark.png b/.github/images/pr_image_dark.png deleted file mode 100644 index 79019ae..0000000 Binary files a/.github/images/pr_image_dark.png and /dev/null differ diff --git a/.github/images/pr_image_light.png b/.github/images/pr_image_light.png deleted file mode 100644 index 86be307..0000000 Binary files a/.github/images/pr_image_light.png and /dev/null differ diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md deleted file mode 100644 index e5da308..0000000 --- a/.github/pull_request_template.md +++ /dev/null @@ -1,24 +0,0 @@ - - - - -### Please confirm your submission meets all the criteria - - - - - -- [ ] Please describe the application briefly. < Please insert the description here > -- [ ] Please attach a video showcasing the application on Linux using the Flatpak. < Please insert the video here > -- [ ] The Flatpak ID follows all the rules listed in the [Application ID requirements][appid]. -- [ ] I have read and followed all the [Submission requirements][reqs] and the [Submission guide][reqs2] and I agree to them. -- [ ] I am an _(please keep whichever is applicable and remove the rest)_ author/developer/upstream contributor to the project. - If not, I contacted upstream developers about this submission. **Link:** - - - - - -[appid]: https://docs.flathub.org/docs/for-app-authors/requirements#application-id -[reqs]: https://docs.flathub.org/docs/for-app-authors/requirements -[reqs2]: https://docs.flathub.org/docs/for-app-authors/submission diff --git a/.github/scripts/archive_eol.py b/.github/scripts/archive_eol.py deleted file mode 100644 index 76d7800..0000000 --- a/.github/scripts/archive_eol.py +++ /dev/null @@ -1,186 +0,0 @@ -import datetime -import os -import subprocess -import time - -import github -from github.GithubException import ( - RateLimitExceededException, - UnknownObjectException, - GithubException, -) - - -def ignore_ref(ref: str) -> bool: - ref_splits = ref.split("/") - - if len(ref_splits) != 4: - return True - - if ref_splits[2] not in ("x86_64", "aarch64") or ref_splits[1].endswith( - (".Debug", ".Locale", ".Sources") - ): - return True - return False - - -def get_eol_refs(arch: str, remote: str) -> set: - cmd = ( - f'flatpak remote-ls --user --arch="{arch}" --all --columns=ref,options {remote}' - ) - ret = subprocess.run(cmd, shell=True, capture_output=True, encoding="utf-8") - eol_refs: set = set() - - if ret.returncode == 0 and ret.stdout: - for line in ret.stdout.split("\n"): - if line: - split = line.split("\t") - if len(split) < 2: - continue - ref, options = split - if ignore_ref(ref): - continue - refname = ref.split("/")[1] - if any(x in options for x in ("eol=", "eol-rebase=")): - eol_refs.add(refname) - - return eol_refs - - -def main() -> None: - token = os.environ["GITHUB_TOKEN"] - - g = github.Github(auth=github.Auth.Token(token)) - - # Exclude refs that have EOL notices but are still maintained - # in some branch - excludes = { - # Maintainer EOLs old branches - "com.riverbankcomputing.PyQt.BaseApp", - # 19.08 branch is EOL - "org.freedesktop.LinuxAudio.BaseExtension", - "org.freedesktop.LinuxAudio.Plugins.LSP", - "org.freedesktop.LinuxAudio.Plugins.setBfree", - "org.freedesktop.LinuxAudio.Plugins.sfizz", - "org.freedesktop.LinuxAudio.Plugins.x42Plugins", - "org.freedesktop.LinuxAudio.Plugins.ZamPlugins", - "org.freedesktop.LinuxAudio.Plugins.gmsynth", - "org.freedesktop.LinuxAudio.Plugins.CAPS", - "org.freedesktop.LinuxAudio.Plugins.CAPS", - "org.freedesktop.LinuxAudio.Plugins.VL1Emulator", - "org.freedesktop.LinuxAudio.Plugins.ZynFusion", - "org.freedesktop.LinuxAudio.Plugins.CMT", - "org.freedesktop.LinuxAudio.Plugins.DrumGizmo", - "org.freedesktop.LinuxAudio.Plugins.TAP", - "org.freedesktop.LinuxAudio.Plugins.SoSynthLV2", - "org.freedesktop.LinuxAudio.Plugins.Surge", - "org.freedesktop.LinuxAudio.Plugins.DPF-Plugins", - "org.freedesktop.LinuxAudio.Plugins.DISTRHO-Ports", - "org.freedesktop.LinuxAudio.Plugins.MDA", - "org.freedesktop.LinuxAudio.Plugins.Ninjas2", - "org.freedesktop.LinuxAudio.Plugins.reMID-lv2", - "org.freedesktop.LinuxAudio.Plugins.swh", - "org.freedesktop.LinuxAudio.Plugins.GxPlugins", - "org.freedesktop.LinuxAudio.Plugins.KapitonovPluginsPack", - "org.freedesktop.LinuxAudio.Plugins.ArtyFX", - "org.freedesktop.LinuxAudio.Plugins.Sorcer", - "org.freedesktop.LinuxAudio.Plugins.ADLplug", - "org.freedesktop.LinuxAudio.Plugins.Fabla", - "org.freedesktop.LinuxAudio.Plugins.Geonkick", - "org.freedesktop.LinuxAudio.Plugins.Helm", - "org.freedesktop.LinuxAudio.Plugins.Dexed", - # 1.6 branch is EOL - "org.freedesktop.Sdk.Extension.golang", - # 19.08, 20.08, 21.08 are EOL - "org.freedesktop.Sdk.Extension.mono6", - # 1.6, 18.08, 19.08 are EOL - "org.freedesktop.Sdk.Extension.openjdk8", - # 18.08 is EOL - "org.freedesktop.Sdk.Extension.php73", - # 1.6 is EOL - "org.freedesktop.Sdk.Extension.rust-stable", - # 19.08, 20.08 are EOL - "org.freedesktop.Sdk.Extension.ziglang", - # master branch is EOL - "org.freedesktop.Platform.VulkanLayer.vkBasalt", - # renamed, previous name is EOL but github repo is - # case-insensitive - "org.gnome.Chess", - "org.gnome.GHex", - "org.gnome.Quadrapassel", - "org.gnome.Tetravex", - # EOL-ed to hide from website - "org.kde.kate", - # renamed, previous name is EOL but github repo is - # case-insensitive - "org.kekikakademi.eFatura", - # EOL notice added for special reasons - "org.mozilla.firefox.BaseApp", - # renamed, previous name is EOL but github repo is - # case-insensitive - "org.tabos.twofun", - # 3-18.08 is EOL - "org.videolan.VLC.Plugin.bdj", - # 3-1.6, 3-18.08 is EOL - "org.videolan.VLC.Plugin.fdkaac", - "org.kde.PlatformTheme.QGnomePlatform", - "com.github.wwmm.easyeffects", - "com.yubico.yubioath", - "com.icanblink.blink", - "com.github.wwmm.pulseeffects", - # beta branch is eol - "org.nicotine_plus.Nicotine", - } - - stable = get_eol_refs("x86_64", "flathub") | get_eol_refs("aarch64", "flathub") - beta = get_eol_refs("x86_64", "flathub-beta") | get_eol_refs( - "aarch64", "flathub-beta" - ) - eols = list({x.lower() for x in (stable | beta)} - {x.lower() for x in excludes}) - - if not eols: - return - - earliest = datetime.datetime.now(datetime.timezone.utc) - datetime.timedelta( - weeks=13 - ) - count = 0 - while count < len(eols): - refname = eols[count] - try: - repo = g.get_repo(f"flathub/{refname}") - if not repo.archived: - try: - default_branch = repo.default_branch - branch = repo.get_branch(default_branch) - last_commit = repo.get_commit(branch.commit.sha) - last_commit_time = last_commit.commit.committer.date.astimezone( - datetime.timezone.utc - ) - except GithubException: - last_commit_time = datetime.datetime.now( - datetime.timezone.utc - ) + datetime.timedelta(seconds=10) - pass - if last_commit_time < earliest: - print( - "Archiving: {} Repo is in EOL list. Last push: {}, earlier than: {}".format( - repo.html_url, - last_commit_time.isoformat(), - earliest.isoformat(), - ) - ) - desc = "This repo is archived by Flathub as the app is EOL. If this was done in error, please open an issue at https://github.com/flathub/flathub/issues" - repo.edit(description=desc) - repo.edit(archived=True) - except UnknownObjectException: - pass - except RateLimitExceededException: - print("Rate limited") - time.sleep(g.rate_limiting_resettime - time.time() + 10) - continue - count += 1 - - -if __name__ == "__main__": - main() diff --git a/.github/scripts/archive_orphan.py b/.github/scripts/archive_orphan.py deleted file mode 100644 index 437ce88..0000000 --- a/.github/scripts/archive_orphan.py +++ /dev/null @@ -1,62 +0,0 @@ -import datetime -import os -import time - -import github -from github.GithubException import ( - RateLimitExceededException, - GithubException, -) - - -def main() -> None: - token = os.environ["GITHUB_TOKEN"] - g = github.Github(auth=github.Auth.Token(token)) - - org = g.get_organization("flathub") - - # excludes = {} - - earliest = datetime.datetime.now(datetime.timezone.utc) - datetime.timedelta( - weeks=60 - ) - - for repo in org.get_repos(): - if not repo.archived: - try: - default_branch = repo.default_branch - branch = repo.get_branch(default_branch) - last_commit = repo.get_commit(branch.commit.sha) - last_commit_time = last_commit.commit.committer.date.astimezone( - datetime.timezone.utc - ) - collaborators = repo.get_collaborators(affiliation="direct") - colb_count = collaborators.totalCount - except GithubException: - last_commit_time = datetime.datetime.now( - datetime.timezone.utc - ) + datetime.timedelta(seconds=10) - colb_count = 1 - pass - except RateLimitExceededException: - print("Rate limited") - time.sleep(g.rate_limiting_resettime - time.time() + 10) - continue - - if colb_count == 0 and last_commit_time < earliest: - print( - "Archiving: {} Repo has no collaborators. Last push: {}, earlier than: {}".format( - repo.html_url, - last_commit_time.isoformat(), - earliest.isoformat(), - ) - ) - # desc = "This repo is archived by Flathub as it is orphaned. If this was done in error or you wish to maintain it, please open an issue at https://github.com/flathub/flathub/issues" - - -# repo.edit(description=desc) -# repo.edit(archived=True) - - -if __name__ == "__main__": - main() diff --git a/.github/scripts/domain_from_appid.py b/.github/scripts/domain_from_appid.py deleted file mode 100644 index 4c13a85..0000000 --- a/.github/scripts/domain_from_appid.py +++ /dev/null @@ -1,90 +0,0 @@ -# ONLY handle appids that need to use `org.flathub.VerifiedApps.txt` - -import sys -import re -from publicsuffixlist import PublicSuffixList - -LOGINS = ( - "com.github.", - "com.gitlab.", - "io.github.", - "io.gitlab.", - "org.gnome.gitlab.", - "org.gnome.World.", - "org.gnome.design", - "org.kde.", - "org.gnome.", -) - - -def demangle(name: str) -> str: - if name.startswith("_"): - name = name[1:] - return name.replace("_", "-") - - -def get_domain(appid: str) -> str: - ret_none = "None" - - if appid.startswith(LOGINS) or appid.count(".") < 2: - return ret_none - - if appid.endswith(".BaseApp"): - return ret_none - - # correctly checking for extension requires checking out - # untrusted code from PRs so rely on some heuristics - - if appid.split(".")[-2].lower() in ( - "addon", - "addons", - "extension", - "extensions", - "plugin", - "plugins", - ): - return ret_none - - if appid.startswith( - ( - "org.freedesktop.Platform.GStreamer.", - "org.freedesktop.Platform.Icontheme.", - "org.freedesktop.Platform.VulkanLayer.", - "org.freedesktop.Sdk.Extension.", - "org.gtk.Gtk3theme.", - "org.kde.KStyle.", - "org.kde.PlatformInputContexts.", - "org.kde.PlatformTheme.", - "org.kde.WaylandDecoration.", - ) - ): - return ret_none - - elif appid.startswith( - ("io.frama.", "page.codeberg.", "io.sourceforge.", "net.sourceforge.") - ): - tld, domain, name = appid.split(".")[0:3] - name = demangle(name) - if domain == "sourceforge": - return f"{name}.{domain}.io".lower() - else: - return f"{name}.{domain}.{tld}".lower() - elif appid.startswith(("io.sourceforge.", "net.sourceforge.")): - [tld, domain, projectname] = appid.split(".")[0:3] - projectname = demangle(projectname) - return f"{projectname}.{domain}.io".lower() - else: - fqdn = ".".join(reversed(appid.split("."))).lower() - psl = PublicSuffixList() - if psl.is_private(fqdn): - return demangle(psl.privatesuffix(fqdn)) - else: - return ".".join( - reversed([demangle(i) for i in appid.split(".")[:-1]]) - ).lower() - - -if __name__ == "__main__": - # PR title as input "(Aa)dd com.foo.bar" - appid = re.sub(r"^\s*add\s+", "", sys.argv[1], flags=re.IGNORECASE) - print(get_domain(appid).strip()) diff --git a/.github/scripts/validate.py b/.github/scripts/validate.py deleted file mode 100644 index 5e242e2..0000000 --- a/.github/scripts/validate.py +++ /dev/null @@ -1,29 +0,0 @@ -import re -import os - - -def validate_title(title: str) -> int: - prefix_pattern = r"(?i)^add\s+" - matched = re.match(prefix_pattern, title) - if not matched: - return 42 - - appid = title[matched.end() :].strip() - regex = r"^[A-Za-z_][\w\-]*$" - split = appid.split(".") - - if ( - len(split) > 255 - or len(split) < 3 - or not all(re.match(regex, sp) for sp in split) - ): - return 42 - - return 0 - - -if __name__ == "__main__": - title = os.environ["PR_TITLE"] - exit_code = validate_title(title) - print(f"EXIT_CODE={exit_code}") - exit(0) diff --git a/.github/workflows/archive.yml b/.github/workflows/archive.yml deleted file mode 100644 index da1f9fd..0000000 --- a/.github/workflows/archive.yml +++ /dev/null @@ -1,36 +0,0 @@ -name: Archive EOL repositories - -on: - schedule: - - cron: '0 0 1 * *' - workflow_dispatch: - -jobs: - archive: - name: Archive EOL repositories - runs-on: ubuntu-latest - timeout-minutes: 120 - steps: - # 4.2.2 - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - with: - persist-credentials: false - - - name: Install dependencies - run: | - sudo apt-get update - sudo apt install -y flatpak python3 python3-pip - pip3 install 'PyGithub==2.3.0' - - - name: Set up Flathub remotes - run: | - flatpak remote-add --user --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo - flatpak remote-add --user --if-not-exists flathub-beta https://flathub.org/beta-repo/flathub-beta.flatpakrepo - - - name: Run EOL script - run: python3 .github/scripts/archive_eol.py - env: - GITHUB_TOKEN: ${{ secrets.FLATHUBBOT_TOKEN }} - -# - name: Run orphan script -# run: python3 .github/scripts/archive_orphan.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index 3696e5c..0000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,34 +0,0 @@ -name: CI - -on: - push: - branches: master - paths: - - '**.py' - pull_request: - branches: master - paths: - - '**.py' - workflow_dispatch: - -jobs: - lint: - runs-on: ubuntu-latest - timeout-minutes: 60 - steps: - # 4.2.2 - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - with: - persist-credentials: false - - # 5.4.0 - - uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 - - - name: Install dependencies - run: pip install --user 'ruff==0.11.0' - - - name: Check format - run: find .github -name *.py -exec ruff format --check {} \; - - - name: Lint - run: find .github -name *.py -exec ruff check --output-format=github {} \; diff --git a/.github/workflows/close-master-prs.yml b/.github/workflows/close-master-prs.yml deleted file mode 100644 index d0edfda..0000000 --- a/.github/workflows/close-master-prs.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: Close PRs to master - -# WARNING: Do NOT use org level secrets or checkout any code in this -# workflow - -on: - pull_request_target: - types: [opened] - branches: - - master - workflow_dispatch: - -jobs: - close: - runs-on: ubuntu-latest - permissions: - pull-requests: write - steps: - - name: Check and close - run: | - has_label=$(gh pr view "$PR_NUM" --json labels -q '.labels | any(.name == "leave-open" or .name == "dependencies")') - if [[ "$has_label" != "true" ]]; then - echo "Not labeled 'leave-open' or 'dependencies'. Closing." - gh pr close "$PR_NUM" -c "$COMMENT" - fi - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - GH_REPO: ${{ github.repository }} - PR_NUM: ${{ github.event.pull_request.number }} - COMMENT: > - This PR is automatically closed because application - submission pull requests must be made against the new-pr - branch. Please choose the base repository as - "flathub/flathub" and the base as "new-pr" in the - "Comparing changes" screen when making the pull request. - The image below shows this. If this was closed in - error, please comment. - ![Image showing new-pr target branch in light mode](https://raw.githubusercontent.com/flathub/flathub/refs/heads/master/.github/images/pr_image_light.png#gh-light-mode-only) - ![Image showing new-pr target branch in dark mode](https://raw.githubusercontent.com/flathub/flathub/refs/heads/master/.github/images/pr_image_dark.png#gh-dark-mode-only) diff --git a/.github/workflows/external-data-checker.yml b/.github/workflows/external-data-checker.yml deleted file mode 100644 index aa9a9d3..0000000 --- a/.github/workflows/external-data-checker.yml +++ /dev/null @@ -1,24 +0,0 @@ -name: 'Check if external data changed across Flathub org' -on: - schedule: - - cron: '0 */4 * * *' - - workflow_dispatch: - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: false - -jobs: - flathub-data-checker-global: - runs-on: ubuntu-latest - timeout-minutes: 230 - steps: - # 4.2.2 - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - with: - persist-credentials: false - - - uses: ./.github/actions/flatpak-external-data-checker - env: - GITHUB_TOKEN: ${{ secrets.FLATHUBBOT_TOKEN }} diff --git a/.github/workflows/lock-prs.yml b/.github/workflows/lock-prs.yml deleted file mode 100644 index a0e784c..0000000 --- a/.github/workflows/lock-prs.yml +++ /dev/null @@ -1,33 +0,0 @@ -name: "Lock closed PRs" - -on: - schedule: - - cron: "0 */12 * * *" - workflow_dispatch: - -jobs: - lock: - permissions: - pull-requests: write - runs-on: ubuntu-latest - steps: - - name: Lock closed PRs - run: | - pr_list=$(gh pr list -L 100000 --state closed --json number,updatedAt) - recent_prs=$(echo "$pr_list" | jq '[.[] | select(.updatedAt >= (now - (7 * 24 * 60 * 60) | todate))]') - sorted_prs=$(echo "$recent_prs" | jq 'sort_by(.updatedAt) | .[] | {number: .number, updatedAt: .updatedAt}') - list=$(echo "$sorted_prs" | jq '.number' | head -n 100) - - unset pr_list recent_prs sorted_prs - - for num in $list; do - if [ "$(gh api repos/"$GH_REPO"/issues/"$num" --jq '.locked')" = "false" ]; then - if ! gh pr view --json labels -q '.labels[].name' "$num"|grep -qE "^(Stale|leave-open)$"; then - echo "Locking pull request $num" - gh pr lock --reason "resolved" "$num" - fi - fi - done - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - GH_REPO: ${{ github.repository }} diff --git a/.github/workflows/lock-spams.yml b/.github/workflows/lock-spams.yml deleted file mode 100644 index 5b629d0..0000000 --- a/.github/workflows/lock-spams.yml +++ /dev/null @@ -1,50 +0,0 @@ -name: Close and lock spam issues and PRs - -# WARNING: Do NOT use org level secrets or checkout any code in this -# workflow - -on: - issues: - types: [labeled] - pull_request: - types: [labeled] - pull_request_target: - types: [labeled] - workflow_dispatch: - -jobs: - spam_issues: - if: github.event.label.name == 'spam' && github.event.issue != null - runs-on: ubuntu-latest - permissions: - issues: write - steps: - - name: Close the issue - run: gh issue close "$ISSUE_NUM" --reason "not planned" - - name: Lock the issue - run: | - if [ "$(gh api repos/"$GH_REPO"/issues/"$ISSUE_NUM" --jq '.locked')" = "false" ]; then - gh issue lock "$ISSUE_NUM" --reason "spam" - fi - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - GH_REPO: ${{ github.repository }} - ISSUE_NUM: ${{ github.event.issue.number }} - - spam_prs: - if: github.event.label.name == 'spam' && github.event.pull_request != null - runs-on: ubuntu-latest - permissions: - pull-requests: write - steps: - - name: Close the PR - run: gh pr close "$PR_NUM" - - name: Lock the PR - run: | - if [ "$(gh api repos/"$GH_REPO"/issues/"$PR_NUM" --jq '.locked')" = "false" ]; then - gh pr lock "$PR_NUM" --reason "spam" - fi - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - GH_REPO: ${{ github.repository }} - PR_NUM: ${{ github.event.pull_request.number }} diff --git a/.github/workflows/merge.yml b/.github/workflows/merge.yml deleted file mode 100644 index 1a3c0d9..0000000 --- a/.github/workflows/merge.yml +++ /dev/null @@ -1,17 +0,0 @@ -name: Automatic application merge - -on: - issue_comment: - types: - - created - -jobs: - merge: - runs-on: ubuntu-latest - timeout-minutes: 30 - if: ${{ github.event.issue.pull_request && contains(github.event.comment.body, '/merge') }} - steps: - # 1.0.9 - - uses: flathub-infra/merge-action@6c25245b7ef599ac1861b2e1be84f553fd1e9bde - with: - token: ${{ secrets.FLATHUBBOT_TOKEN }} diff --git a/.github/workflows/pr-check.yml b/.github/workflows/pr-check.yml deleted file mode 100644 index 1ebd61e..0000000 --- a/.github/workflows/pr-check.yml +++ /dev/null @@ -1,288 +0,0 @@ -name: Check PRs - -on: - workflow_dispatch: - schedule: - - cron: '0 */2 * * *' - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - validate-prs: - runs-on: ubuntu-latest - timeout-minutes: 45 - permissions: - pull-requests: write - steps: - - name: Install deps - run: | - pip install 'publicsuffixlist==1.0.2.20250802' - - - name: Fetch recent PR numbers - run: | - CUTOFF_DATE="2025-05-25T00:00:00Z" - prs_raw=$(gh pr list --base "new-pr" -L 50 --state open --json number,createdAt,updatedAt,isDraft,labels \ - | jq -r --arg cutoff "$CUTOFF_DATE" '[. - [] - | select( - .isDraft == false - and .createdAt >= $cutoff - and .updatedAt >= (now - (2 * 24 * 60 * 60) | todate) - and (all(.labels[].name; . != "Stale") or (.labels == [])) - ) - | .number - ] | .[]') - prs_list=$(printf '%s\n' $prs_raw | head -30 | paste -sd "," -) - echo "PR_LIST=$prs_list" >> "$GITHUB_ENV" - draft_prs_raw=$(gh pr list --base "new-pr" -L 50 --state open --json number,createdAt,updatedAt,isDraft,labels \ - | jq -r --arg cutoff "$CUTOFF_DATE" '[. - [] - | select( - .isDraft == true - and .createdAt >= $cutoff - and .updatedAt >= (now - (2 * 24 * 60 * 60) | todate) - and (all(.labels[].name; . != "Stale") or (.labels == [])) - ) - | .number - ] | .[]') - draft_prs_list=$(printf '%s\n' $draft_prs_raw | head -30 | paste -sd "," -) - echo "DRAFT_PR_LIST=$draft_prs_list" >> "$GITHUB_ENV" - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - GH_REPO: ${{ github.repository }} - - - name: Label draft PRs - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - GH_REPO: ${{ github.repository }} - run: | - IFS=',' read -ra PR_NUMBERS <<< "${{ env.DRAFT_PR_LIST }}" - - if [ ${#PR_NUMBERS[@]} -eq 0 ] || [ -z "${PR_NUMBERS[0]}" ]; then - echo "No PRs found, exiting." - exit 0 - fi - - for PR_NUM in "${PR_NUMBERS[@]}"; do - echo "Checking PR https://github.com/flathub/flathub/pull/$PR_NUM" - gh pr edit "$PR_NUM" --add-label "work-in-progress" || true - done - - - name: Validate PRs - run: | - IFS=',' read -ra PR_NUMBERS <<< "${{ env.PR_LIST }}" - - if [ ${#PR_NUMBERS[@]} -eq 0 ] || [ -z "${PR_NUMBERS[0]}" ]; then - echo "No PRs found, exiting." - exit 0 - fi - - for PR_NUM in "${PR_NUMBERS[@]}"; do - echo "Checking PR https://github.com/flathub/flathub/pull/$PR_NUM" - - json=$(gh pr view "$PR_NUM" --json body,title -q '{body: .body, title: .title}') - PR_BODY=$(echo "$json" | jq -r .body) - PR_TITLE=$(echo "$json" | jq -r .title) - NORMALIZED_PR_BODY=$(printf "%s\n" "$PR_BODY" | tr -d '\r') - - unset "$PR_TITLE" - export PR_TITLE="$PR_TITLE" - - EXIT_CODE=$(curl -sSL "$SCRIPT_URL" | python3 | grep 'EXIT_CODE=' | cut -d= -f2) - echo "EXIT_CODE is $EXIT_CODE" - unset "$PR_TITLE" - - PR_COMMENTS="$(gh pr view "$PR_NUM" --json comments -q '.comments[].body')" - - PR_LABELS="$(gh pr view "$PR_NUM" --json labels -q '.labels[].name')" - - PR_THREAD_COUNT=$(gh api repos/$GH_REPO/pulls/$PR_NUM/comments \ - --jq '[.[] | select(.position != null)] | length') - - PR_FILES=$(gh pr view "$PR_NUM" --json files --jq '.files[].path') - - COMMIT_COUNT="(gh api repos/$GH_REPO/pulls/$PR_NUM --jq '.commits')" - - CONTAINS_MASTER=$(gh api repos/$GH_REPO/pulls/$PR_NUM/commits --jq '.[1] | (.commit.author.email == "mclasen@redhat.com" and .commit.message == "Add some instructions")') - - BLOCKED=0 - CHECKLIST_FAILED=0 - REVIEW_COMMENT_LINES=() - - gh pr view $PR_NUM --json isDraft --jq '.isDraft' | grep -q false && \ - gh pr edit $PR_NUM --remove-label "work-in-progress" || true - - comment_exists() { - local comment="$1" - echo "$PR_COMMENTS" | grep -Fq "$comment" - } - - comment_exists_full() { - local comment="$1" - echo "$PR_COMMENTS" | grep -Fxq "$comment" - } - - comment_exists_any() { - for comment in "$@"; do - if echo "$PR_COMMENTS" | grep -Fq "$comment"; then - return 0 - fi - done - return 1 - } - - label_exists_any() { - for label in "$@"; do - if echo "$PR_LABELS" | grep -Fxq "$label"; then - return 0 - fi - done - return 1 - } - - start_build() { - if ! label_exists_any "pr-check-blocked" "blocked"; then - if ! comment_exists_any "$BUILD_START_COMMENT_PARTIAL" "$BUILD_SUCCESS_COMMENT"; then - echo "PR is not marked as blocked and none of the build comments exist. Starting a build" - gh pr comment "$PR_NUM" --body "$BUILD_START_COMMENT" - fi - fi - } - - if [ "$CONTAINS_MASTER" = "true" ]; then - echo "PR contains commits from master branch" - REVIEW_COMMENT_LINES+=("- PR does not contain commits from the [master branch](https://github.com/flathub/flathub/commits/master/)") - BLOCKED=1 - fi - - if [ "$EXIT_CODE" -ne 0 ]; then - echo "PR title validation failed" - REVIEW_COMMENT_LINES+=('- PR title is "Add $FLATPAK_ID"') - BLOCKED=1 - fi - - if echo "$PR_FILES" | grep -qE '.*/flathub\.json$'; then - echo "flathub.json not at toplevel" - BLOCKED=1 - REVIEW_COMMENT_LINES+=("- flathub.json file is at toplevel") - fi - - if ! echo "$PR_FILES" | grep -qE '^[^/]+\.(ya?ml|json)$'; then - echo "No JSON/YAML files at toplevel" - BLOCKED=1 - REVIEW_COMMENT_LINES+=("- Flatpak manifest is at toplevel") - fi - - CHECKLIST_PRESENT=$(printf "%s\n" "$PR_BODY" | grep -cE '^- ?\[[xX]\] [A-Za-z]+' || true) - echo "Total checklists found: $CHECKLIST_PRESENT" - UNCHECKED=$(printf "%s\n" "$PR_BODY" | grep -Ec '^- \[ \] [A-Za-z]+' || true) - echo "Unchecked checklists found: $UNCHECKED" - - if [ "$CHECKLIST_PRESENT" -eq 0 ]; then - echo "No checklist present in PR body" - CHECKLIST_FAILED=1 - BLOCKED=1 - elif [ "$UNCHECKED" -gt 0 ]; then - echo "Checklist incomplete in PR body" - CHECKLIST_FAILED=1 - BLOCKED=1 - fi - - REQUIRED_ITEM="I have read and followed all the [Submission requirements]" - REQUIRED_CHECKED=$(printf "%s\n" "$NORMALIZED_PR_BODY" | grep -Fi "[x] $REQUIRED_ITEM" || true) - - if [ -z "$REQUIRED_CHECKED" ]; then - echo "Required checklist not found in PR body" - CHECKLIST_FAILED=1 - BLOCKED=1 - fi - - if [ "$CHECKLIST_FAILED" -eq 1 ]; then - REVIEW_COMMENT_LINES+=("- All [checklists](https://github.com/flathub/flathub/blob/master/.github/pull_request_template.md?plain=1) are present in PR body and are completed") - fi - - if [ "$BLOCKED" -eq 1 ]; then - REVIEW_COMMENT_LINES+=("- The [requirements](https://docs.flathub.org/docs/for-app-authors/requirements) and [submission process](https://docs.flathub.org/docs/for-app-authors/submission) have been followed") - fi - - echo "BLOCKED is set to $BLOCKED" - - if [ "$BLOCKED" -eq 0 ]; then - if ! label_exists_any "blocked"; then - DOMAIN=$(curl -sSL "$DOMAIN_SCRIPT_URL" | python3 - "$PR_TITLE") - if [ -n "$DOMAIN" ] && [ "$DOMAIN" != "None" ]; then - echo "Domain is: $DOMAIN" - VERIF_URL="https://$DOMAIN/.well-known/org.flathub.VerifiedApps.txt" - VERIF_COMMENT="If you intend to verify this app, please confirm that you can upload $VERIF_URL. Otherwise, ignore this" - DOMAIN_COMMENT="$DOMAIN_COMMENT_PARTIAL $DOMAIN. $VERIF_COMMENT. Please comment if this incorrect." - if ! comment_exists_full "$DOMAIN_COMMENT"; then - echo "Did not find domain comment, commenting" - gh pr comment "$PR_NUM" --body "$DOMAIN_COMMENT" - fi - fi - fi - if label_exists_any "pr-check-blocked"; then - echo "Removing pr-check-blocked label" - gh pr edit "$PR_NUM" --remove-label "pr-check-blocked" || true - fi - if ! label_exists_any "awaiting-changes" "awaiting-upstream" "blocked" "reviewed-waiting"; then - echo "Marking as awaiting-review" - gh pr edit "$PR_NUM" --add-label "awaiting-review" --remove-label "pr-check-blocked" || true - fi - start_build - elif [ "$BLOCKED" -eq 1 ]; then - echo "Marking as blocked" - gh pr edit "$PR_NUM" --add-label "pr-check-blocked" --remove-label "awaiting-review" - if ! comment_exists "$REVIEW_COMMENT_PARTIAL"; then - echo "Did not find comment, commenting" - REVIEW_COMMENT="$BASE_REVIEW_COMMENT" - for line in "${REVIEW_COMMENT_LINES[@]}"; do - REVIEW_COMMENT="$REVIEW_COMMENT"$'\n'"$line" - done - gh pr comment "$PR_NUM" --body "$REVIEW_COMMENT" - else - echo "Found comment, skipping commenting" - fi - else - echo "Nothing to do" - start_build - fi - if [ "$BLOCKED" -eq 1 ] \ - && label_exists_any "pr-check-blocked" "blocked" \ - && ! comment_exists_any "$BUILD_SUCCESS_COMMENT" \ - && [ "$(echo "$PR_COMMENTS" | grep -E -c 'Test build.*failed')" -gt 10 ]; then - echo "PR is blocked and too many failing builds. Locking" - gh pr comment "$PR_NUM" --body "$LOCKED_COMMENT" - gh pr lock "$PR_NUM" || true - fi - if label_exists_any "awaiting-review" && [ "$PR_THREAD_COUNT" -gt 0 ]; then - echo "Has awaiting-review label and review comments, marking as awaiting-changes" - gh pr edit "$PR_NUM" --add-label "awaiting-changes" --remove-label "awaiting-review" || true - fi - done - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - GH_REPO: ${{ github.repository }} - SCRIPT_URL: https://raw.githubusercontent.com/flathub/flathub/refs/heads/master/.github/scripts/validate.py - DOMAIN_SCRIPT_URL: https://raw.githubusercontent.com/flathub/flathub/refs/heads/master/.github/scripts/domain_from_appid.py - BUILD_SUCCESS_COMMENT: "[Test build succeeded]" - BUILD_START_COMMENT: | - Starting a test build of the submission. Please fix any - issues reported in the build log. You can restart the build - once the issue is fixed by commenting the phrase below. - - bot, build - BUILD_START_COMMENT_PARTIAL: "Starting a test build of the submission" - BASE_REVIEW_COMMENT: | - This pull request is temporarily marked as blocked as some - automated checks failed on it. Please make sure the - following items are done: - LOCKED_COMMENT: > - This pull request is marked as blocked and has too many - builds failing. Locking this PR temporarily. Please build - it locally following the instructions and push the relevant - changes first. - REVIEW_COMMENT_PARTIAL: "This pull request is temporarily marked as blocked as some" - DOMAIN_COMMENT_PARTIAL: "The domain to be used for verification is" diff --git a/.github/workflows/stale-blocked.yml b/.github/workflows/stale-blocked.yml deleted file mode 100644 index f98a202..0000000 --- a/.github/workflows/stale-blocked.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: "Close stale blocked PRs" -on: - schedule: - - cron: "0 0 * * 6" - workflow_dispatch: - -jobs: - stale: - permissions: - pull-requests: write - runs-on: ubuntu-latest - steps: - # 9.1.0 - - uses: actions/stale@5bef64f19d7facfb25b37b414482c7164d639639 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - stale-pr-message: |- - This pull request has not received any updates and it will be - automatically closed in 7 days. Please comment or reopen if - necessary. - days-before-stale: -1 - days-before-close: -1 - days-before-pr-stale: 23 - days-before-pr-close: 7 - any-of-pr-labels: blocked,pr-check-blocked - remove-stale-when-updated: false - exempt-pr-labels: leave-open - operations-per-run: 200 - ascending: true - ignore-updates: true diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml deleted file mode 100644 index 84d6440..0000000 --- a/.github/workflows/stale.yml +++ /dev/null @@ -1,34 +0,0 @@ -name: "Close stale PR" -on: - schedule: - - cron: "0 5 * * 0" - workflow_dispatch: - -jobs: - stale: - permissions: - issues: write - pull-requests: write - runs-on: ubuntu-latest - steps: - # 9.1.0 - - uses: actions/stale@5bef64f19d7facfb25b37b414482c7164d639639 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - stale-issue-message: |- - This issue has not received any updates and it will be - automatically closed in 7 days. Please comment or reopen if - necessary. - stale-pr-message: |- - This pull request has not received any updates and it will be - automatically closed in 7 days. Please comment or reopen if - necessary. - days-before-stale: 183 - days-before-close: 7 - any-of-issue-labels: quality-guidelines - any-of-pr-labels: awaiting-changes,work-in-progress,awaiting-upstream - remove-stale-when-updated: true - exempt-issue-labels: leave-open - exempt-pr-labels: leave-open - operations-per-run: 500 - ascending: true diff --git a/.github/workflows/tag-quality-mod-issues.yml b/.github/workflows/tag-quality-mod-issues.yml deleted file mode 100644 index 8e6e49a..0000000 --- a/.github/workflows/tag-quality-mod-issues.yml +++ /dev/null @@ -1,53 +0,0 @@ -name: Label and tag quality guidelines issues - -on: - issues: - types: [opened, labeled] - workflow_dispatch: - -jobs: - label: - if: startsWith(github.event.issue.title, 'Quality guideline problems for') && github.event.issue.state != 'closed' - runs-on: ubuntu-latest - steps: - - name: Add quality-guidelines label - if: github.event.action == 'opened' - run: | - if [[ "$ISSUE_TITLE" == "Quality guideline problems for " ]]; then - echo "Default title, likely invalid issue. Skipping labelling" - exit 0 - fi - - has_label=$(gh issue view "$ISSUE_NUM" --json labels -q '.labels | any(.name == "quality-guidelines")') - if [[ "$has_label" != "true" ]]; then - gh issue edit "$ISSUE_NUM" --add-label "quality-guidelines" - fi - env: - GITHUB_TOKEN: ${{ secrets.FLATHUBBOT_TOKEN }} - GH_REPO: ${{ github.repository }} - ISSUE_NUM: ${{ github.event.issue.number }} - ISSUE_TITLE: ${{ github.event.issue.title }} - - tag: - runs-on: ubuntu-latest - if: github.event.label.name == 'quality-guidelines' && github.event.issue.state != 'closed' - steps: - - name: Find Comment - # 3.1.0 - uses: peter-evans/find-comment@3eae4d37986fb5a8592848f6a574fdf654e61f9e - id: fc - with: - issue-number: ${{ github.event.issue.number }} - comment-author: 'flathubbot' - body-regex: '^Thank you for opening this issue! cc @flathub\/quality-moderation$' - - - name: Add comment tagging the team - # 4.0.0 - uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 - with: - token: ${{ secrets.FLATHUBBOT_TOKEN }} - comment-id: ${{ steps.fc.outputs.comment-id }} - issue-number: ${{ github.event.issue.number }} - body: | - Thank you for opening this issue! cc @flathub/quality-moderation - edit-mode: replace diff --git a/.github/workflows/trigger-flathub-build.yml b/.github/workflows/trigger-flathub-build.yml deleted file mode 100644 index 48055b8..0000000 --- a/.github/workflows/trigger-flathub-build.yml +++ /dev/null @@ -1,68 +0,0 @@ -name: Trigger Flathub Build -run-name: Build of ${{ inputs.flatpak_id }} from ref ${{ inputs.git_branch }} - -on: - workflow_dispatch: - inputs: - git_branch: - description: 'Git branch to build' - required: true - default: 'master' - flatpak_id: - description: 'Flatpak ID' - required: true - force_test: - description: 'Force test build on master' - required: true - default: 'false' - type: choice - options: - - 'true' - - 'false' - -env: - API_URL: https://flathub-vorarbeiter.apps.openshift.gnome.org/api/pipelines - FLATPAK_ID: ${{ github.event.inputs.flatpak_id }} - GIT_BRANCH: ${{ github.event.inputs.git_branch }} - FORCE_TEST: ${{ github.event.inputs.force_test }} - GITHUB_URL: https://github.com/flathub - -jobs: - build: - permissions: {} - runs-on: ubuntu-latest - timeout-minutes: 30 - steps: - - name: Check for existence of repo and branch - run: | - git -c credential.interactive=false ls-remote --heads --exit-code \ - "$GITHUB_URL"/"$FLATPAK_ID".git "$GIT_BRANCH" - - - name: Print information - shell: bash - run: | - if [ "$FORCE_TEST" == "true" ]; then - echo -e "\n\n" - echo "Triggering test build from master branch of $FLATPAK_ID" - elif [ "$GIT_BRANCH" == "master" ] || [ "$GIT_BRANCH" == "beta" ] || [[ "$GIT_BRANCH" == branch/* ]]; then - echo -e "\n\n" - echo "Triggering official build from $GIT_BRANCH branch of $FLATPAK_ID" - else - echo -e "\n\n" - echo "Triggering test build from $GIT_BRANCH of $FLATPAK_ID" - fi - - - name: Trigger build - run: | - if [ "$FORCE_TEST" == "true" ]; then - JSON_PAYLOAD="{\"app_id\": \"$FLATPAK_ID\", \"params\": {}}" - else - JSON_PAYLOAD="{\"app_id\": \"$FLATPAK_ID\", \"params\": {\"ref\": \"refs/heads/$GIT_BRANCH\"}}" - fi - - curl -X POST "$API_URL" \ - -H "Authorization: Bearer $TOKEN" \ - -H "Content-Type: application/json" \ - -d "$JSON_PAYLOAD" - env: - TOKEN: ${{ secrets.VORO_AUTH_TOKEN }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..73ff59a --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +* +!flatpak.metainfo.xml +!org.droposs.app.yml \ No newline at end of file diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..1e7a990 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "shared-modules"] + path = shared-modules + url = https://github.com/flathub/shared-modules.git diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 1bfec7d..0000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,15 +0,0 @@ -### Submitting a new package - -If you are submitting a new package please read the [app requirements](https://docs.flathub.org/docs/for-app-authors/requirements) and [app submission](https://docs.flathub.org/docs/for-app-authors/submission) pages. - -Also double-check that your PR is against the `new-pr` branch. - -### Reporting a bug on a package - -Please open bugs for packages on their respective repositories you can search for them here: https://github.com/flathub - -### Requesting a new package - -Please do not open issues requesting packages. As long as a package meets the guidelines above and works it will -generally be accepted. If you want to create a Flatpak see the [documentation](https://docs.flatpak.org/) -or join [#flatpak:matrix.org](https://matrix.to/#/#flatpak:matrix.org) for help. diff --git a/COPYING b/COPYING deleted file mode 100644 index 4362b49..0000000 --- a/COPYING +++ /dev/null @@ -1,502 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! diff --git a/README.md b/README.md deleted file mode 100644 index 0faf88c..0000000 --- a/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# Flathub - -Flathub is the central place for building and hosting Flatpak builds. - -Using the Flathub repository ----------------------------- - -To install applications that are hosted on Flathub, use the following: -``` -flatpak remote-add flathub https://flathub.org/repo/flathub.flatpakrepo -flatpak install flathub org.gnome.Recipes -``` - -To install applications from the beta branch, use the following: -``` -flatpak remote-add flathub-beta https://flathub.org/beta-repo/flathub-beta.flatpakrepo -flatpak install flathub-beta org.godotengine.Godot -``` - -For more information and more applications see https://flathub.org - -Contributing to Flathub ------------------------ - -For information on creating packages or reporting issues please see the [contributing page](/CONTRIBUTING.md). - -***Note:*** *this repository is not for reporting issues related to the flathub.org website itself or contributing to its development. For that, go to https://github.com/flathub-infra/website* diff --git a/flatpak.metainfo.xml b/flatpak.metainfo.xml new file mode 100644 index 0000000..f22e364 --- /dev/null +++ b/flatpak.metainfo.xml @@ -0,0 +1,40 @@ + + + org.droposs.app + + Game + GameTool + + + + app + Drop client for Linux + + CC-BY-SA-4.0 + AGPL-3.0-or-later + + + pointing + keyboard + touch + + + +

+ The companion app for the Drop Server +

+
+ + org.droposs.app.desktop + + + https://raw.githubusercontent.com/Drop-OSS/media-sources/refs/heads/main/library_game_page.png + + + https://raw.githubusercontent.com/Drop-OSS/media-sources/refs/heads/main/library.png + + + https://raw.githubusercontent.com/Drop-OSS/media-sources/refs/heads/main/library_game_page.png + + +
\ No newline at end of file diff --git a/org.droposs.app.yml b/org.droposs.app.yml new file mode 100644 index 0000000..bdf03bc --- /dev/null +++ b/org.droposs.app.yml @@ -0,0 +1,79 @@ +id: org.droposs.app + +runtime: org.gnome.Platform +runtime-version: '48' +sdk: org.gnome.Sdk + +command: drop-app +finish-args: + - --share=ipc + - --share=network + - --socket=fallback-x11 + - --socket=wayland + - --socket=pulseaudio + - --device=all + - --share=network + - --allow=multiarch + - --allow=devel + - --talk-name=org.gnome.Mutter.DisplayConfig + - --talk-name=org.freedesktop.ScreenSaver + - --system-talk-name=org.freedesktop.UDisks2 + - --filesystem=/run/media + # For Steam Deck HDR support + - --env=LD_LIBRARY_PATH=/usr/lib/extensions/vulkan/gamescope/lib + - --filesystem=xdg-run/gamescope-0:ro + # For Debian + - --filesystem=/media + - --filesystem=~/.config/MangoHud:ro + - --filesystem=~/.var/app/org.droposs.app/data/ + - --env=PATH=/app/bin:/usr/bin:/app/utils/bin:/usr/lib/extensions/vulkan/MangoHud/bin/:/app/jre/bin/:/usr/lib/extensions/vulkan/gamescope/bin + - --env=GST_PLUGIN_SYSTEM_PATH=/app/lib32/gstreamer-1.0:/app/lib/gstreamer-1.0:/usr/lib/i386-linux-gnu/gstreamer-1.0:/usr/lib/x86_64-linux-gnu/gstreamer-1.0 + # Disable access to xdg-data/flatpak as it's causing a finish-args-unnecessary-xdg-data-access error. + # Flatpak talk API might be enough but this might break features like Steam games detection. + # - --filesystem=xdg-data/flatpak:ro + # Needed for appimages + - --env=APPIMAGE_EXTRACT_AND_RUN=1 + # See: https://github.com/flathub/net.lutris.Lutris/pull/368#issuecomment-1751381312 + - --env=WEBKIT_DISABLE_DMABUF_RENDERER=1 + - --env=NO_TRAY_ICON=true + +modules: + - shared-modules/SDL/SDL-1.2.15.json + - name: main + buildsystem: simple + + sources: + # If you use GitHub releases, you can target an existing remote file + - type: file + url: https://github.com/Drop-OSS/drop-app/releases/download/v0.3.3/Drop.Desktop.Client_0.3.3_amd64.deb + sha256: c3da6761db3c9bc0c04b3083377069f9417509cad6db81b6ef838b55d9f32242 # This is required if you are using a remote source + only-arches: [x86_64] + - type: file + path: flatpak.metainfo.xml + build-commands: + - set -e + - ls + + # Extract the deb package + - mkdir deb-extract + - ar -x *.deb --output deb-extract + - tar -C deb-extract -xf deb-extract/data.tar.gz + + # Copy binary + - ls deb-extract + - ls deb-extract/usr + - ls deb-extract/usr/bin + - 'install -Dm755 deb-extract/usr/bin/drop-app /app/bin/drop-app' + + # Copy desktop file + ensure the right icon is set + - cat deb-extract/usr/share/applications/Drop\ Desktop\ Client.desktop + - sed -i 's/^Icon=.*/Icon=org.droposs.app/' deb-extract/usr/share/applications/Drop\ Desktop\ Client.desktop + + # Copy icons + - install -Dm644 deb-extract/usr/share/icons/hicolor/128x128/apps/drop-app.png /app/share/icons/hicolor/128x128/apps/org.droposs.app.png + - install -Dm644 deb-extract/usr/share/icons/hicolor/32x32/apps/drop-app.png /app/share/icons/hicolor/32x32/apps/org.droposs.app.png + - install -Dm644 deb-extract/usr/share/icons/hicolor/256x256@2/apps/drop-app.png /app/share/icons/hicolor/256x256@2/apps/org.droposs.app.png + + - install -Dm644 deb-extract/usr/share/applications/Drop\ Desktop\ Client.desktop /app/share/applications/org.droposs.app.desktop + + - install -Dm644 flatpak.metainfo.xml /app/share/metainfo/org.droposs.app.metainfo.xml \ No newline at end of file diff --git a/shared-modules b/shared-modules new file mode 160000 index 0000000..57e1de8 --- /dev/null +++ b/shared-modules @@ -0,0 +1 @@ +Subproject commit 57e1de8b2ee9794e081c9de6058e23100b49b5a2