{"id":18317543,"url":"https://github.com/nuitka/nuitka-action","last_synced_at":"2025-05-16T06:07:07.054Z","repository":{"id":44407006,"uuid":"512502349","full_name":"Nuitka/Nuitka-Action","owner":"Nuitka","description":"Action to build with Nuitka on GitHub in your workflows","archived":false,"fork":false,"pushed_at":"2025-05-11T17:29:32.000Z","size":111,"stargazers_count":167,"open_issues_count":8,"forks_count":31,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-05-16T06:06:59.449Z","etag":null,"topics":["github-actions","nuitka","python"],"latest_commit_sha":null,"homepage":"","language":"Jinja","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Nuitka.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-07-10T17:53:09.000Z","updated_at":"2025-05-11T17:29:16.000Z","dependencies_parsed_at":"2024-01-30T08:38:25.511Z","dependency_job_id":"77a0bc4e-caf1-46b3-a187-e9b63faa0944","html_url":"https://github.com/Nuitka/Nuitka-Action","commit_stats":{"total_commits":121,"total_committers":17,"mean_commits":7.117647058823529,"dds":0.5123966942148761,"last_synced_commit":"bd28462bbfb3af8232d17cf515c643086cc052c8"},"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nuitka%2FNuitka-Action","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nuitka%2FNuitka-Action/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nuitka%2FNuitka-Action/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nuitka%2FNuitka-Action/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Nuitka","download_url":"https://codeload.github.com/Nuitka/Nuitka-Action/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254478190,"owners_count":22077676,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["github-actions","nuitka","python"],"created_at":"2024-11-05T18:06:35.199Z","updated_at":"2025-05-16T06:07:02.032Z","avatar_url":"https://github.com/Nuitka.png","language":"Jinja","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Python-to-Executable-Or-Module\n\nThis GitHub Action builds Windows, Mac, and Linux programs and extension modules from Python using\nthe amazingly compatible [nuitka](https://github.com/Nuitka/Nuitka) Python compiler.\n\n## Key Features\n\n- **Build Standalone Executables** - Build an executable from your **Python** code (standalone\n  `*.exe` or `*.bin` file executables and even `.app` bundles for Mac)\n- **Build Binary Python Modules** - Build binary `*.pyd` modules that are importable by other\n  **Python** scripts\n- **Mac, Linux, and Windows** - Support for Windows, Mac (including .app bundles), and Linux\n- **GUI Support** - Supports GUIs made, for example, with TkInter, [PySide6](https://pypi.org/project/PySide6/), and [PyQt6](https://pypi.org/project/PyQt6/)\n- **Lots More!** - All the features of \\[Nuitka [Python Compiler](https://nuitka.net), including\n  support for [Nuitka Commercial Features](https://nuitka.net/doc/commercial.html) like obfuscation,\n  embedding data files, and more (for those with a license).\n\n# Simple to Use\n\nSee [Usage Details](#usage-details) below for more info.\n\n## 1) Create a **Python** script\n\n```python\n## hello_world.py\nprint(\"hello world!\")\n```\n\nRun it in python\n\n```\nC:\\\u003e python hello_world.py\nhello world!\n```\n\n## 2) Build an executable\n\nUse this action as a step in one of your project's CI workflow jobs\n([details below](#usage-details)):\n\n```yaml\n# Build python script into a stand-alone exe\n- uses: Nuitka/Nuitka-Action@main\n  with:\n    nuitka-version: main\n    script-name: hello_world.py\n```\n\n## 3) Run the executable\n\n```\nC:\\\u003e hello_world.exe\nhello world!\n```\n\n## Current Limitations\n\n- Not enough examples yet that demonstrate how to use this action in practice. Please help proving\n  them.\n\n# Common traps\n\n- Uploading artifacts should make sure `include-hidden-files` is present or else incomplete folders\n  will be copied in case of `.libs` folders.\n\n- For ``mode`` the value ``app`` is the default and needs to be switched. For\n  packages you need to use ``module``.\n\n# Some Example Projects\n\n- TODO: We need to add a repository demonstrating how to use the different\n  modes and typical applications. Help is welcome\n\n# Usage Details\n\nSee [action.yml](action.yml) for details on how this action works under the hood. It is actually\nextremely simple.\n\n## Build a python script into an exe\n\n```yaml\njobs:\n\n  build:\n    runs-on: windows-latest\n\n    steps:\n\n      # Check-out repository\n      - uses: actions/checkout@v4\n\n      # Setup Python\n      - uses: actions/setup-python@v5\n        with:\n          python-version: '3.x' # Version range or exact version of a Python version to use, using SemVer's version range syntax\n          architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified\n\n      # Build python script into a single execute or app folder (macOS)\n      - uses: Nuitka/Nuitka-Action@main\n        with:\n          nuitka-version: main\n          script-name: hello_world.py\n          mode: app\n\n      # Uploads artifact\n      - name: Upload Artifact\n        uses: actions/upload-artifact@v4\n        with:\n          name: exe\n          path: build/hello_world.exe\n          include-hidden-files: true\n```\n\n## GUI Builds\n\nSimilar to the others, but with `enable-plugins: pyside6` or `enable-plugins:tk-inter` to ensure\nthat those libraries are included correctly.\n\n```yaml\n- name: Qt GUI with PySide6\n  uses: Nuitka/Nuitka-Action@main\n  with:\n    nuitka-version: main\n    script-name: my_qt_gui_app.py\n    mode: standalone\n    enable-plugins: pyside6\n```\n\n```yaml\n- name: Python GUI With TkInter\n  uses: Nuitka/Nuitka-Action@main\n  with:\n    nuitka-version: main\n    script-name: my_tkinter_gui_app.py\n    mode: standalone\n    enable-plugins: tk-inter\n```\n\n## Multi-Platform Builds\n\nConfigure a runner of the appropriate operating system to build for a given platform. You can even\ndo multiple platforms in a single workflow using a matrix strategy, as shown below:\n\n```yaml\njobs:\n  build:\n    strategy:\n      matrix:\n        os: [macos-latest, ubuntu-latest, windows-latest]\n\n    runs-on: ${{ matrix.os }}\n\n    steps:\n      - name: Check-out repository\n        uses: actions/checkout@v4\n\n      - name: Setup Python\n        uses: actions/setup-python@v5\n        with:\n          python-version: '3.10' # Version range or exact version of a Python version to use, using SemVer's version range syntax\n          architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified\n          cache: 'pip'\n          cache-dependency-path: |\n            **/requirements*.txt\n\n      - name: Install Dependencies\n        run: |\n          pip install -r requirements.txt -r requirements-dev.txt\n\n      - name: Build Executable\n        uses: Nuitka/Nuitka-Action@main\n        with:\n          nuitka-version: main\n          script-name: kasa_cli\n          mode: app\n\n      - name: Upload Artifacts\n        uses: actions/upload-artifact@v4\n        with:\n          name: ${{ runner.os }} Build\n          path: |\n            build/*.exe\n            build/*.bin\n            build/*.app/**/*\n          include-hidden-files: true\n```\n\nYou will see that it creates executable binaries for Mac, Linux, and Windows.\n\n## Python and Package Dependencies\n\nThis action installs the following **Python** packages specified by the\n[requirements.txt](requirements.txt) of this action repo.\n\n```\nordered-set==4.1.0\n    # via -r requirements.in\nwheel==0.38.4\n    # via -r requirements.in\nzstandard==0.20.0\n```\n\n## Value syntax\n\nSince Action workflows accept no list values, for options that in **Nuitka** can be given multiple\ntimes, there is support for splitting those arguments by newline, which allows you to specify\nmultiple values like this.\n\n```yaml\ninclude-data-dir: |\n  source_path_dir1=dest_path_dir1\n  source_path_dir2=dest_path_dir2\n  source_path_dir3=dest_path_dir3\n```\n\n# Additional Documentation\n\nSee [Nuitka](https://github.com/Nuitka/Nuitka) for full documentation on Nuitka. It's a really\nfantastic tool!\n\n# License\n\n**Nuitka Action** scripts and documentation in this project are under the [MIT License](LICENSE).\n\n**Nuitka** has the [Apache 2.0 License](https://github.com/Nuitka/Nuitka/blob/develop/LICENSE.txt)\n\n**Python** has the\n[Python Software Foundation (PSF) License](https://github.com/python/cpython/blob/main/LICENSE).\n\n## You are Responsible for Complying with your Project's Dependencies' Licenses\n\nThis tool compiles and copies your project's package dependencies (and their dependencies) into the\noutput executable, which will be considered a combined or derivative work of those packages.\n\n\u003e **_Important:_** You are responsible for compliance with the licenses of your project's package\n\u003e dependencies. Please consult with an attorney about your individual/project's compliance needs and\n\u003e strategy.\n\n## How to Comply With Dependency Package Licenses\n\nThere are some license checker tools that you might consider integrating with your project.\nGenerally speaking, they enable you to specify which licenses (or types) are approved or disapproved\nand alert you whenever your project has a package dependency that is not approved.\n\nHere is a list of license checker tools:\n\n- [python-license-check](https://github.com/dhatim/python-license-check) - can be run as a GitHub\n  pre-commit hook.\n- [dependencies-license-compliance-checker](https://github.com/marketplace/actions/dependencies-license-compliance-checker)\n  \\- a github action that you can run before your executable build.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnuitka%2Fnuitka-action","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnuitka%2Fnuitka-action","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnuitka%2Fnuitka-action/lists"}