A tool for checking if the external data used in Flatpak manifests is still up to date

Overview

Flatpak External Data Checker

Tests Coverage Status Total alerts Language grade: Python CodeFactor

This is a tool for checking for outdated or broken links of external data in Flatpak manifests.


Motivation

Flatpak apps are built using external data (git checkouts, tarballs, simple files, etc.). A very specific case of this is the use of extra data, which works as a way to download third party binaries at installation time.

Of course, the links pointing to external data can become obsolete, so it is very important to account for and correct such issues. This is especially critical for the extra data, in which a broken link impedes the installation of the application.

This project offers ways to easily check or monitor the state of such links, as well as the suggestion of new versions.

It works by extracting all the external data of a Flatpak manifest and giving it to a collection of checkers, which will set up the right state and, possibly, new versions of each external data.

Use

The simplest use of this tool is by calling:

flatpak-external-data-checker MANIFEST_FILE

it should display messages about any broken or outdated external data.

Installation

This tool itself is available in flatpak format from Flathub. Install with

flatpak install --from https://dl.flathub.org/repo/appstream/org.flathub.flatpak-external-data-checker.flatpakref

And run with

flatpak run org.flathub.flatpak-external-data-checker MANIFEST_FILE

Running in a container

flatpak-external-data-checker is also avaiable as an OCI image from GitHub Container Registry.

You can use the run-in-container.sh helper script to set up needed CLI options for you and run the image using podman:

~/src/endlessm/flatpak-external-data-checker/run-in-container.sh \
    [ARGS …] \
    ~/src/flathub/com.example.App/com.example.App.json

Automatically submitting PRs

When run with the --update flag, this tool can commit any necessary changes to Git and open a GitHub pull request. In order to do this, it requires a GitHub access token, specified in the GITHUB_TOKEN environment variable.

Automatically merging PRs

The tool will also automatically merge previously opened pull request for unavailable (BROKEN) sources if the change has successfully passed CI checks and the token has sufficient privileges.

Automatically merging all submitted PRs, not just unavailable sources, from the tool can be forcefully enabled by setting automerge-flathubbot-prs to true in flathub.json, or it can be completely disabled by setting automerge-flathubbot-prs to false.

Changes to Flatpak manifests

For simple checks to see if a URL is broken, no changes are needed. However, you can add additional metadata to the manifest to allow the checker to discover new versions.

Some of the following checkers are able to determine upstream version number, and automatically add it to releases list in metainfo. To specify which source is the app upstream source, set property is-main-source to true in the checker metadata for that source.

URL checker

If the upstream vendor has an URL that redirects to the latest version of the application, you can add something like the following to check and update the URL for the latest version:

"x-checker-data": {
    "type": "rotating-url",
    "url": "http://example.com/last-version",
    "pattern": "http://example.com/foo-v([0-9.]+).tar.gz"
}

The version number for the latest version can be detected in two ways:

  • If the filename ends with .AppImage, the version number is extracted from the AppImage. (It is run in a bwrap sandbox.)
  • Otherwise, if "pattern" is specified in "x-checker-data", the given regular expression is matched against the full URL for the latest version, and the first match group is taken to be the version. (This follows the convention used by debian/watch files.)

HTML checker

Both the version number and the download URL will be gathered from a static HTML page which contains this information:

"x-checker-data": {
    "type": "html",
    "url": "https://www.example.com/download.html",
    "version-pattern": "The latest version is ([\\d\\.-]+)",
    "url-pattern": "(https://www.example.com/pub/foo/v([\\d\\.-]+)/foo.tar.gz)"
}

If the HTML page contains multiple versions with download links, set single pattern containing two nested match groups for both url and version:

(https://sourceforge.net/.+/qrupdate-([\\d\\.]+\\d).tar.gz)/download" } ">
"x-checker-data": {
    "type": "html",
    "url": "https://sourceforge.net/projects/qrupdate/rss",
    "pattern": "
   (https://sourceforge.net/.+/qrupdate-([\\d\\.]+\\d).tar.gz)/download"
}

To disable sorting and get first matched version/url, set sort-matches to false.

URL templates

The HTML checker also supports building the download URL using the retrieved version string, its components according to the Python LooseVersion class and semantic versioning fields:

"x-checker-data": {
    "type": "html",
    "url": "https://www.example.com/download.html",
    "version-pattern": "The latest version is ([\\d\\.-]*)",
    "url-template": "https://www.example.com/$version/v$version.tar.gz"
}
"x-checker-data": {
    "type": "html",
    "url": "https://www.example.com/download.html",
    "version-pattern": "The latest version is ([\\d\\.-]*)",
    "url-template": "https://www.example.com/$major.$minor/v$version.tar.gz"
}

If the placeholder is immediately followed by an underscore, you need to add braces:

"x-checker-data": {
    "type": "html",
    "url": "https://www.example.com/download.html",
    "version-pattern": "The latest version is ([\\d\\.-]*)",
    "url-template": "https://www.example.com/$version0.$version1/v${version0}_${version1}_version2.tar.gz"
}

Git checker

To check for latest git tag in corresponding git source repo, add checker metadata with type git and set tag-pattern to a regular expression with exactly one match group (the pattern will be used to extract version from tag):

"x-checker-data": {
    "type": "git",
    "tag-pattern": "^v([\\d.]+)$"
}

By default tags are sorted based on version number extracted from tag. To disable sorting and keep order from git ls-remote, set sort-tags to false.

If the project follows semver specification, you can set version-scheme property to semantic in order to use semantic version scheme for sorting. In this case, make sure that tag-pattern extracts only valid semver strings.

JSON checker

The JSON checker allows using jq to query JSON data with arbitrary schema to get version and download url.

To use the JSONChecker, specify JSON data URL, version query and url query (you can use $version variable got from the version query in url query):

{
    "type": "json",
    "url": "https://api.github.com/repos/stedolan/jq/releases/latest",
    "version-query": ".tag_name | sub(\"^jq-\"; \"\")",
    "url-query": ".assets[] | select(.name==\"jq-\" + $version + \".tar.gz\") | .browser_download_url"
}

for git type sources, specify tag query and, optionaly, commit and version queries:

{
    "type": "json",
    "url": "https://api.github.com/repos/stedolan/jq/releases/latest",
    "tag-query": ".tag_name",
    "version-query": "$tag | sub(\"^jq-\"; \"\")",
    "timestamp-query": ".published_at"
}

timestamp-query is optional, but if provided - must return a string with timestamp in ISO format.

See the jq manual for complete information about writing queries.

Debian repo checker

For the DebianRepoChecker, which deals only with deb packages, it can read the following metadata (add it to manifest element it refers to, e.g. where "type": "extra-data" is declared):

"x-checker-data": {
    "type": "debian-repo",
    "package-name": "YOUR_PACKAGE_NAME",
    "root": "ROOT_URL_TO_THE_DEBIAN_REPO",
    "dist": "DEBIAN_DIST",
    "component": "DEBIAN_COMPONENT"
}

Anitya (release-monitoring) checker

Anitya is an upstream release monitoring project by Fedora. It supports multiple backends for retrieving version information from different services, including GitHub, GitLab, Sourceforge, etc. To use the AnityaChecker, specify numeric project ID on release-monitoring.org and add a template for source download URL. Template syntax is the same as for the HTMLChecker:

"x-checker-data": {
    "type": "anitya",
    "project-id": 6377,
    "stable-only": false,
    "url-template": "https://github.com/flatpak/flatpak/releases/download/$version/flatpak-$version.tar.xz"
}

Set stable-only to true to retrieve latest stable version (as recognized by Anitya).

For git type sources, instead of url-template, set tag-template to derive git tag from version.

GNOME checker

Check for latest source tarball for a GNOME project.

"x-checker-data": {
    "type": "gnome",
    "name": "pygobject",
    "versions": {
        "<": "3.38.0"
    },
    "stable-only": true
}

Set stable-only to false to check for pre-releases, too.

You can also set version constraints in versions property (optional).
It should contain key-value pairs where key is the comparison operator (one of <, >, <=, >=, ==, !=), and the value is the version to compare with. So, {"<": "3.38.0", "!=": "3.37.1"} means "any version less than 3.38.0 except 3.37.1". All constraints must match simultaneously, i.e. if one doesn't match - version is rejected.

PyPI checker

Check for Python package updates on PyPI.

"x-checker-data": {
    "type": "pypi",
    "name": "Pillow"
}

By default it will check for source package (sdist package type). To check for binary package instead, set packagetype to bdist_wheel (only noarch wheels are supported currently).

JetBrains checker

Special checker that will check for available updates for JetBrains products:

"x-checker-data": {
    "type": "jetbrains",
    "code": "PRODUCT-CODE",
    "release-type": "release or eap (defaults to release)"
}

Snapcraft checker

Special checker that will check for available updates for Snapcraft packages:

"x-checker-data": {
    "type": "snapcraft",
    "name": "PACKAGE-NAME",
    "channel": "stable, beta, or any other tag the project uses"
}

Rust checker

Special checker that will check for available updates for Rust:

"x-checker-data": {
    "type": "rust",
    "package": "package name, for example: rust",
    "channel": "nightly, stable or beta",
    "target": "target triple, for example: x86_64-unknown-linux-gnu"
}

Chromium checker

Special checker that will check for available updates to the Chromium tarballs, as well as the toolchain binaries or sources used to build it.

"x-checker-data": {
    "type": "chromium",
    "component": "chromium, llvm-prebuilt, or llvm-git; defaults to chromium"
}

The following components are supported:

  • chromium: updates the Chromium tarball itself, used on URL-based sources (e.g. type: archive).
  • llvm-prebuilt: updates a tarball pointing to the official LLVM prebuilt toolchain archive matching the latest Chromium version. Used on URL-based sources.
  • llvm-git: updates a type: git source for its commit to point to the LLVM sources for the toolchain used by the latest Chromium version.

License and Copyright

License: GPLv2

Copyright © 2018–2019 Endless Mobile, Inc.

Comments
  • Add support for selectively updating manifests

    Add support for selectively updating manifests

    Fixes https://github.com/flathub/flatpak-external-data-checker/issues/249

    I opted to add an optional property to mark sources as "important", is-important: true. If "important" sources are present in external data, only update the manifest if at least 1 important source received an update. This basically lets apps choose when they want PRs to open, e.g. many apps may only want a PR when at least their primary upstream app source is updated.

    Manifests without important sources will not be affected by this change. f-e-d-c will continue making manifest updates as before for all modules. In other words, this does not change any existing behaviour.

    There are some (I think comprehensive) tests for this feature in test_checker.py.

    I also tested with an actual GitHub repo (forked EasyEffects which happens to have convenient action to use):

    When is-critical-source is set for EasyEffects itself, but only libsigc++ has an update available

    Doesn't make a PR/manifest update as shown by the logs as expected

    When is-critical-source is set for both for EasyEffects and libsigc++, and libsigc++ has an update available

    Makes PR as expected

    opened by vchernin 25
  • Sporadic update PRs with invalid checksums for SourceForge URLs

    Sporadic update PRs with invalid checksums for SourceForge URLs

    Hi,

    today the flathubbot opened a strange PR on org.gnome.Chess. PR is opened for dependency which doesn't have x-data-checker options set up and it just changed the hash without changing the URL. I looked at the URL and the file had last update in 2016.

    I will close the PR for now, because the build is failing anyway.

    bug help wanted 
    opened by Zlopez 13
  • How to avoid beta versions from pypi

    How to avoid beta versions from pypi

    I have the following check

            x-checker-data:
              type: pypi
              name: borgbackup
              versions: { "<": "1.2" }
    

    and the report says

    CHANGE SOON: borgbackup-1.1.16.tar.gz
     Has a new version:
      URL:       https://files.pythonhosted.org/packages/83/4a/95725c920aecb0fc00fb58604fe3c8e5c79a1f92a3b857a9c6ffacd312e6/borgbackup-1.2.0b2.tar.gz
      SHA256:    82b6100cb9db7113dd8c082ac9c9e1de7bd538eb9cb685c2cf499a34e1bac64d
      Size:      3940922
      Version:   1.2.0b2
      Timestamp: 2021-02-06 13:18:31.784134
    

    I can work around this by using "<": "1.1.99" but maybe I will get a 1.1.x beta version with this? Any way to fix this?

    PS: Also I could not find docs that say that versions is even supported for pypi.

    enhancement 
    opened by sophie-h 12
  • Add checker for PyPI packages

    Add checker for PyPI packages

    Given PyPI package name and desired dist type (sdist or bdist_wheel), this checker finds latest available release. Fixes #74, see test manifest for usage example. I would appreciate a review from @nanonyme who is more familiar with PyPI and previously worked on something similar for BuildStream.

    opened by gasinvein 12
  • Add --force-[no-]fork CLI parameters

    Add --force-[no-]fork CLI parameters

    I am trying to use this in GitHub Actions, with the default GITHUB_TOKEN provided to the action. However, origin_repo.permissions.push is False. Some digging suggests that this may be an artefact of the kind of token being used here.[0] However, if we just go ahead and push and create the CR directly to the repo, it works fine.

    So, add a --force-no-fork CLI parameter to override the repository permissions check, and a --force-fork parameter for symmetry. The default is still to check the repository permissions. (Of course if you --force-no-fork and you really don't have permission to push or create PRs, you'll hit an error a few lines later.)

    [0] https://github.com/endlessm/eos-google-chrome-app/pull/96

    opened by wjt 10
  • Check content type of downloaded files

    Check content type of downloaded files

    Add a list of known-wrong Content-Type header patterns, and reject downloaded file if its Content-Type matches. The idea is to catch error pages returned by services without HTTP error status code, and avoid submitting them as "updates". Should fix #168, assuming that the infamous SourceForge page has C-T alike text/html.

    Ideally, we should add C-T denylist for URLChecker, too, but just throwing it in will break our tests (httbin[go] returns text/html for its /base64/ URL). Given that it's most primarily targeted at SourceForge, and sources from there are unlikely to be extra-data, I consider the denylist for URLChecker not as important.

    opened by gasinvein 9
  • Exit with success if PR can be opened

    Exit with success if PR can be opened

    Previously, this script would exit(0) if some sources were out of date but we were able to open a PR to update them. We want this behaviour because the owner of whatever CI job runs the checker should not get a failure email if the script opens a PR: that's a success for the script! The script should only indicate failure if it is not able to carry out the task it was asked to perform (edit the source tree, open a PR, etc.).

    f4cddf5d12579c39e1fac58f1730d5f553a4c58b changed this behaviour. Change it back. (I missed this while reviewing that!)

    @andrunko noticed this behaviour after #145 merged because the job successfully opened a PR for our Chrome Flatpak but then the Jenkins job still failed.

    opened by wjt 9
  • Data checker fails on manifest for org.gnome.Chess

    Data checker fails on manifest for org.gnome.Chess

    I tried to use the data checker for org.gnome.Chess and got

    Traceback (most recent call last):
      File "/home/zlopez/git/flatpak-external-data-checker/flatpak-external-data-checker", line 30, in <module>
        main()
      File "/home/zlopez/git/flatpak-external-data-checker/src/main.py", line 258, in main
        manifest_checker.check(filter_type)
      File "/home/zlopez/git/flatpak-external-data-checker/src/checker.py", line 196, in check
        checker.check(data)
      File "/home/zlopez/git/flatpak-external-data-checker/src/checkers/htmlchecker.py", line 81, in check
        latest_url = get_latest(external_data.checker_data, "url-pattern", html)
      File "/home/zlopez/git/flatpak-external-data-checker/src/checkers/htmlchecker.py", line 47, in get_latest
        f"{pattern_name} {pattern} does not contain exactly 1 match group"
    ValueError: url-pattern re.compile('https://download.gnome.org/sources/gnome-chess/(d+.d+)/gnome-chess-(d+.d+.d+).tar.xz') does not contain exactly 1 match group
    

    As I understand there is issue in url-pattern, because the url for gnome apps is https://download.gnome.org/sources/gnome-chess/3.36/gnome-chess-3.36.1.tar.xz, so the version is there twice, but one time without patch number and in the other with patch number. I'm not sure how to adjust the manifest to make it work. Could you give me some advice?

    opened by Zlopez 9
  • Selective update doesn't handle the git branch tip case

    Selective update doesn't handle the git branch tip case

    You can skip this intro/justification and jump to the example
    Due to the fact that QtWebEngine releases are tagged much slower than the commits made to the respected qtwebengine-chromium branch, we build from the latest commit of the latter.
    We have a QtWebEngine web browser packaged, qutebrowser, so we want to get the latest security fixes much faster.

    Here's the example.

    qtwebengine.json

    {
        "name": "qt6-qtwebengine",
        "sources": [
            {
                "type": "git",
                "url": "https://invent.kde.org/qt/qt/qtwebengine.git",
                "tag": "v6.3.1",
                "commit": "b981601dedffaa21b474e3acf254e77a490c9173",
                "x-checker-data": {
                    "is-main-source": true,
                    "type": "json",
                    "url": "https://invent.kde.org/api/v4/projects/qt%2Fqt%2Fqtwebengine/repository/tags",
                    "tag-query": "first(.[].name | match( \"v6.3[\\\\d.]+-lts|v6.3[\\\\d.]+\" ) | .string)",
                    "version-query": "$tag | sub(\"^v\"; \"\")",
                    "timestamp-query": ".[] | select(.name==$tag) | .commit.created_at"
                },
                "disable-submodules": true
            },
            {
                "type": "git",
                "url": "https://invent.kde.org/qt/qt/qtwebengine-chromium.git",
                "branch": "94-based",
                "commit": "c643145a35e519c38f89bf1282ecc5c1fdb82ade",
                "dest": "src/3rdparty"
            }
        ]
    }
    

    Running f-e-d-c with in important updates mode:

    $ flatpak-external-data-checker --edit-only --require-important-update qtwebengine.json
    
    WARNING src.lib.externaldata: Source qtwebengine-chromium.git: remote data changed
    INFO    src.manifest: Finished check [1/2] git qt6-qtwebengine/qtwebengine-chromium.git (from qtwebengine.json)
    INFO    src.manifest: Finished check [2/2] git qt6-qtwebengine/qtwebengine.git (from qtwebengine.json)
    BROKEN: qtwebengine-chromium.git
     Has a new version:
      URL:       https://invent.kde.org/qt/qt/qtwebengine-chromium.git
      Commit:    5f9753749b6c138c1d5bc390006396e9a65b19a1
      Tag:       None
      Branch:    94-based
      Version:   None
      Timestamp: None
    
    INFO    src.manifest: No important source had an update, not updating manifest
    INFO    src.main: Check finished with 0 error(s)
    

    Even though the branch commit is outdated, f-e-d-c doesn't update the source, as it's not defined as important.

    As expect, setting the source as important like the following will not end well.

    {
        "type": "git",
        "url": "https://invent.kde.org/qt/qt/qtwebengine-chromium.git",
        "branch": "94-based",
        "commit": "c643145a35e519c38f89bf1282ecc5c1fdb82ade",
        "dest": "src/3rdparty",
        "x-checker-data": {
            "is-important": true
        }
    }
    
    $ flatpak-external-data-checker --edit-only --require-important-update qtwebengine.json
    
    ERROR   src.manifest: Error reading source: 'type' is a required property
    
    Failed validating 'required' in schema['properties']['x-checker-data']:
        {'properties': {'arches': {'items': {'type': 'string'},
                                   'type': 'array'},
                        'is-important': {'type': 'boolean'},
                        'is-main-source': {'type': 'boolean'},
                        'parent-id': {'type': 'string'},
                        'source-id': {'type': 'string'},
                        'type': {'type': 'string'}},
         'required': ['type'],
         'type': 'object'}
    
    On instance['x-checker-data']:
        OrderedDict([('is-important', True)])
    INFO    src.manifest: Checking 1 external data items
    INFO    src.manifest: Started check [1/1] git qt6-qtwebengine/qtwebengine.git (from qtwebengine.json)
    INFO    src.manifest: Finished check [1/1] git qt6-qtwebengine/qtwebengine.git (from qtwebengine.json)
    WARNING src.main: Check finished with 1 error(s)
    
    opened by tinywrkb 8
  • flathubbot not automatically merging

    flathubbot not automatically merging

    We got an MR from flathubbot, but it still needed manually merging, see https://github.com/flathub/com.brave.Browser/pull/23.

    However, I've enabled automerging, see com.brave.Browser's flathub.json.

    I'm not sure exactly what the issue is. Perhaps I wrote it wrongly?

    opened by TheEvilSkeleton 8
  • Incomplete HTTP read is ignored

    Incomplete HTTP read is ignored

    In past week, flatpak-external-data-checker submitted several PRs (e.g. flathub/com.wps.Office#96) to WPS Office flatpak where the checksum (and only it) was changed. The "new" checksum is different each time and seems invalid - re-checking showed that the checksum didn't actually change. It doesn't look like partial read, since the size doesn't change, and no http error occurs.

    bug help wanted 
    opened by gasinvein 8
  • [Feature] Show link to changelogs in update PRs

    [Feature] Show link to changelogs in update PRs

    It would be nice to have a link to each packages chsmgelog in the PRs. For some dependencies I'd like to review them before merging. At least for Pypi I assume a changelog link should be easy enough to get via the API, other platforms could be added on demand.

    What do you think about that idea?

    opened by dreua 0
  • Script requests to update to an older version

    Script requests to update to an older version

    In https://github.com/flathub/org.gnome.Evince/pull/110 the script is recommending to downgrade, which is odd unless there is something I am missing.

    Update libgxps-0.3.2.tar.xz to 0.2.5
    

    0.3.2 archive was uploaded on 2021-02-26 whereas 0.2.5 on 2017-02-25

    • https://download.gnome.org/sources/libgxps/0.3/
    • https://download.gnome.org/sources/libgxps/0.2/
    opened by gpoo 1
  • Detect content type from magic number of first chunk

    Detect content type from magic number of first chunk

    Should fix #245

    For some reason, tests.test_checker.TestExternalDataChecker finds 3 new versions instead of 2, even without my changes applied: See the latest CI job of this branch, which prints the found sources:

    https://github.com/Alexander-Wilms/flatpak-external-data-checker/tree/investigate-test-test_checker_testexternaldatachecker

    opened by Alexander-Wilms 0
  • Add option to show branch in PR title

    Add option to show branch in PR title

    f-e-d-c is currently used by com.riverbankcomputing.PyQt.BaseApp on 3 different branches. Having the branch (e.g. 5.15-22.08 or 6.3) would make it possible to see which branch is targeted directly in the Notification or the PR list.

    Note: This is currently not tested

    opened by JakobDev 1
  • More debug when HTTP checker fails

    More debug when HTTP checker fails

    The Flatpak linter runs inside an environment where IPv6 works, so f-e-d-c tried to use IPv6 to contact a website with a broken IPv6 configuration: https://discourse.flathub.org/t/enforcing-pull-request-workflow-and-green-ci-status-of-prs/3109/4

    Ideally, f-e-d-c would show more information about the failed attempt, such as the IP address for the website, so that debugging the problem would be more efficient.

    ERROR   src.manifest: Failed to check archive sweethome3d/SweetHome3D-7.0.2-linux-x64.tgz with HTMLChecker: Error querying for new versions: Connection timeout to host http://www.sweethome3d.com/history.jsp
    
    enhancement 
    opened by hadess 0
  • fedc fails when using parent source with JSON checker

    fedc fails when using parent source with JSON checker

    Related to https://github.com/flathub/com.valvesoftware.Steam.CompatibilityTool.Proton-GE/pull/119

    Here, f-e-d-c runs against an up-to-date manifest, so there is no new version for the Proton-GE source, but without a new version (an no ability to determine the current one), it's has nothing to put into child sources check urls.

    Maybe the fix could be to store the current version under x-checker-data for these checkers where it's not possible to get the current version from the manifest ?

    bug enhancement 
    opened by Lctrs 2
Owner
Flathub
Flathub is a build and distribution service for Flatpak applications. Its goal is to act as a central hub for making desktop applications available to users.
Flathub
Checking-For-Fibonacci-Syquence-In-Python - Checking For Fibonacci Syquence In Python

Checking-For-Fibonacci-Syquence-In-Python The Fibonacci sequence is a set of num

 John Michael Oliba 1 Feb 14, 2022
An universal linux port of deezer, supporting both Flatpak and AppImage

Deezer for linux This repo is an UNOFFICIAL linux port of the official windows-only Deezer app. Being based on the windows app, it allows downloading

Aurélien Hamy 154 Jan 6, 2023
Python plugin/extra to load data files from an external source (such as AWS S3) to a local directory

Data Loader Plugin - Python Table of Content (ToC) Data Loader Plugin - Python Table of Content (ToC) Overview References Python module Python virtual

Cloud Helpers 2 Jan 10, 2022
External Network Pentest Automation using Shodan API and other tools.

Chopin External Network Pentest Automation using Shodan API and other tools. Workflow Input a file containing CIDR ranges. Converts CIDR ranges to ind

Aditya Dixit 9 Aug 4, 2022
Python 3.9.4 Graphics and Compute Shader Framework and Primitives with no external module dependencies

pyshader Python 3.9.4 Graphics and Compute Shader Framework and Primitives with no external module dependencies Fully programmable shader model (even

Alastair Cota 1 Jan 11, 2022
A Python Web Application for Checking vaccine slots by pincodes and auto slot booking.

The Dashboard is developed using Bokeh and python 3.5+. This dashboard is useful for you if you are looking for something which will help you to book the vaccine slot once slots become available. Other Vaccine Finders will notify you once slots become available but you will still need to login to the portal and book the slot manually. This dashboard will look for slot availability continuously and will send the OTP itself once slots become available.

Suraj Deshmukh 10 Jan 23, 2022
An integrated library for checking email if it is registered on social media

An integrated library for checking email if it is registered on social media

Sidra ELEzz 13 Dec 8, 2022
This is a simple python script for checking A/L Examination results of srilankan students

AL-Result-Checker This is a simple python script for checking A/L Examination results of srilankan students INSTALLATION [Termux] [Linux] : apt-get up

Razor Kenway 8 Oct 24, 2022
A module to prevent invites and joins to Matrix rooms by checking the involved server(s)' domain.

Synapse Domain Rule Checker A module to prevent invites and joins to Matrix rooms by checking the involved server(s)' domain. Installation From the vi

matrix.org 4 Oct 24, 2022
Similarity checking of sign languages

Similarity checking of sign languages This repository checks for similarity betw

Tonni Das Jui 1 May 13, 2022
Donatus Prince 6 Feb 25, 2022
Push a record and you will receive a email when that date

Push a record and you will receive a email when that date

null 5 Nov 28, 2022
Regular Expressions - Use regular expressions to detect date format

A list of all the resources used https://regex101.com/ - To test regex https://w

Ravika Nagpal 1 Jan 4, 2022
A ULauncher/Albert extension that supports currency, units and date time conversion, as well as a calculator that supports complex numbers and functions.

Ulauncher/Albert Calculate Anything Ulauncher/Albert Calculate Anything is an extension for Ulauncher and Albert to calculate things like currency, ti

tchar 67 Jan 1, 2023
Birthday program - A program that lookups a birthday txt file and compares to the current date to check for birthdays

Birthday Program This is a program that lookups a birthday txt file and compares

Daquiver 4 Feb 2, 2022
Originally used during Marketplace.tf's open period, this program was used to get the profit of items bought with keys and sold for dollars.

Originally used during Marketplace.tf's open period, this program was used to get the profit of items bought with keys and sold for dollars. Practically useless for me now, but can be used as an example of tkinter.

BoggoTV 1 Dec 11, 2021
A tool to flash .ofp files in bootloader mode without needing MSM Tool, an alternative to official realme tool

Oppo/Realme Flash .OFP File on Bootloader A tool to flash .ofp files in bootloader mode without needing MSM Tool, an alternative to official realme to

Italo Almeida 70 Jan 2, 2023
HPomb Is Socail Engineering Tool , Used For Bombing , Spoofing and Anonymity Available For Linux And Android(Termux)

HPomb v2020.02 Coming Soon Created By Secanonm HPomb Is Socail Engineering Tool , Used For Bombing , Spoofing and Anonymity Available For Linux And An

Secanonm 10 Jul 25, 2022
vFuzzer is a tool developed for fuzzing buffer overflows, For now, It can be used for fuzzing plain vanilla stack based buffer overflows

vFuzzer vFuzzer is a tool developed for fuzzing buffer overflows, For now, It can be used for fuzzing plain vanilla stack based buffer overflows, The

Vedant Bhalgama 5 Nov 12, 2022