{"id":18974518,"url":"https://github.com/m7a/co-ci","last_synced_at":"2026-01-31T15:01:46.283Z","repository":{"id":164554600,"uuid":"250885348","full_name":"m7a/co-ci","owner":"m7a","description":"Ma_Sys.ma Continuous Integration system (Ma_Sys.ma CI)","archived":false,"fork":false,"pushed_at":"2024-04-28T19:42:09.000Z","size":140,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-05T06:51:09.516Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/m7a.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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":"2020-03-28T20:17:48.000Z","updated_at":"2024-04-28T19:42:13.000Z","dependencies_parsed_at":"2024-04-28T20:45:42.825Z","dependency_job_id":null,"html_url":"https://github.com/m7a/co-ci","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/m7a/co-ci","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m7a%2Fco-ci","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m7a%2Fco-ci/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m7a%2Fco-ci/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m7a%2Fco-ci/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/m7a","download_url":"https://codeload.github.com/m7a/co-ci/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m7a%2Fco-ci/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28946055,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-31T14:26:55.697Z","status":"ssl_error","status_checked_at":"2026-01-31T14:26:52.545Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":[],"created_at":"2024-11-08T15:15:19.340Z","updated_at":"2026-01-31T15:01:46.269Z","avatar_url":"https://github.com/m7a.png","language":"Dockerfile","funding_links":[],"categories":[],"sub_categories":[],"readme":"---\nsection: 32\nx-masysma-name: masysmaci/main\ntitle: Ma_Sys.ma CI\ndate: 2020/03/28 17:56:53\nlang: en-US\nauthor: [\"Linux-Fan, Ma_Sys.ma (Ma_Sys.ma@web.de)\"]\nkeywords: [\"masysmaci\", \"ci\", \"perl\", \"mdvl\"]\nx-masysma-version: 2.0\nx-masysma-repository: https://www.github.com/m7a/co-ci\nx-masysma-website: https://masysma.net/32/masysmaci_main.xhtml\nx-masysma-owned: 1\nx-masysma-copyright: (c) 2019, 2020, 2023, 2024 Ma_Sys.ma \u003cinfo@masysma.net\u003e\n---\nOverview\n========\n\nThe Ma_Sys.ma Continuous Integration system (short: _Ma_Sys.ma CI_) attempts to\nbe a single-user, lightweight and automation-friendly system to perform a\ntightly defined set of tasks related to the automatic building of self-made\nDebian packages when their on-disk changelogs and repositories indicate changes\nand the synchronization to a self-hosted private repository.\n\nIt was created out of necessity because existing systems were either very\nlarge (e.g. Gitlab and Jenkins), unstable (e.g. Concourse) or too difficult\nto automate properly. As a unique feature, Ma_Sys.ma CI does not require a\nGit server, nor database of any kind. Instead, it takes repositories from below\na common root directory as its input and writes logfiles to directory\n`x-co-ci-logs` as its only output.\n\nTo function correctly, Ma_Sys.ma CI requires at least three other Ma_Sys.ma\ncomponents:\n\n * [maartifact(11)](../11/maartifact.xhtml)\n * [masysmaci/build(32)](masysmaci_build.xhtml)\n * [masysmaci/pkgsync(32)](masysmaci_pkgsync.xhtml)\n\nBuilding an individual package with Docker\n==========================================\n\nIn case you want to build a Ma_Sys.ma program without having to first dig\nthorugh the configuration for the Ma_Sys.ma CI, most of the programs can\nbe built as follows by making use of a precompiled Ma_Sys.ma CI container,\ne.g. for package `mdvl-big4` which comes from the repository `bo-big`\n(see [big4(32)](../32/big4.xhtml)).\n\n\t$ mkdir root\n\t$ cd root\n\t$ sudo -s\n\t# chown 1000:1000 .\n\t# maquickpkg() { docker run --rm -it -v \"$(pwd):/home/masysmaci/wd\" masysma/ci:20240428 /bin/sh -exc \"cd /home/masysmaci/wd \u0026\u0026 git clone \\\"https://github.com/m7a/$1\\\" \u0026\u0026 cd \\\"$1\\\" \u0026\u0026 ant package\"; }; maquickpkg bo-big\n\t# exit\n\nAfter this, a new file `mdvl-big4_..._all.deb` should have been created in\ndirectory `root` as a result of the build process.\n\nRunning in Docker\n=================\n\nTo get started with the CI using Docker, download the repository to a directory\ncallled `co-ci` and start it with `docker-compose`:\n\n\t$ mkdir root\n\t$ cd root\n\t$ git clone https://www.github.com/m7a/co-ci\n\t$ cd co-ci\n\t$ docker-compose up\n\nThis builds the necessary images and afterwards starts containers equipped for\nbuilding packages.\n\nGetting started: Building existent and new Packages\n===================================================\n\nTry out building a package by downloading its repository:\n\n\t$ cd root\n\t$ git clone https://www.github.com/m7a/bo-big\n\t$ cd bo-big\n\n## Using Docker\n\nWhen using Docker (as described in the previous section), the CI should then\ntrigger automatically after a few minutes.\n\n## Running Manually\n\nIf you don't want to use docker and rather run the CI task on a local or\nvirtual machine, you can trigger it from the co-ci subdirectory as follows:\n\n\t$ ant runci\n\nThis runs the CI once by traversing through all detected repositories and\nexecutes all associated actions. To run it continuously in a loop and with\nproper logging, run script `cimain.sh` instead.\n\nBy default, it expects to be able to install missing build dependencies by\nusing `sudo -n apt-get update` and `sudo -n apt-get -y install \u003c...\u003e` commands.\nIt may be necessary to adjust this behaviour in `ant-build-template.xml` for\nrunning on a non-container machine. In case you are creating a custom build VM\nor such, you could also consider installing the `51-masysma-apt` sudo\nconfiguration provided as part of this repository.\n\n## Results\n\nAfterwards, package `mdvl-d5man2` should become available through the reprepro\nrepository at `/var/tmp/masysmacirepo` (which is the default location). In case\nof failure, consult the logs in directory `root/x-co-ci-logs`.\n\nTo build your own package, provide files `build.xml`, `debian-changelog.txt` and\n`hello.c` from the [masysmaci/build(32)](masysmaci_build.xhtml) documentation\nin a directory e.g. called `hello` and add the following lines to `build.xml`:\n\n~~~{.xml}\n\u003c!-- CI INTEGRATION --\u003e\n\u003ctarget name=\"autoci\" depends=\"autopackage\"/\u003e\n~~~\n\nMake it a git repository as follows:\n\n\t$ cd root/hello\n\t$ git init .\n\t$ git add .\n\t$ git commit -m \"Initial commit. / Hello world example.\"\n\nAs soon as the changes are commited, the CI should pick up the changes and build\nthe `mdvl-hello` package proposed in the\n[masysmaci/build(32)](masysmaci_build.xhtml) documentation.\n\nSystem Configuration\n====================\n\nThe easiest way to change configuration is by using environment variables.\nAny of these variables may be supplied on the commandline for `docker-compose`\nor a dedicated `.env` file. See [the docker-compose\ndocumentation](https://docs.docker.com/compose/environment-variables/) for\ndetails.\n\nThe following environment variables are available for configuration\n(default values given after `=`):\n\n`MA_DEBIAN_MIRROR=http://ftp.de.debian.org/debian`\n:   Configures the URL of a Debian mirror to use.\n`MA_REPOSITORY_ROOT=/var/tmp/masysmacirepo`\n:   Configures the file system location of the reprepro repository to write\n    files to.\n`MA_GNUPG_ROOT=./dot_gnupg_sample/`\n:   Configures a `.gnupg` directory to use for the CI's container.\n    The data from that directory is used to sign packages added to the\n    reprepro repository. It is highly recommended to either change the\n    contents of `dot_gnupg_sample` or configure a different directory here.\n    See section _Key Files and Signatures_ for details.\n\n## Change how the System is composed\n\nThe environment variables do not change how the system is composed. If you want\nto change e.g. the number of containers to use for CI builds or select different\narchitectures to run containers, check the following files:\n\nThis advanced configuration is made of two files: `docker-compose.yml` and\n`Dockerfile`. Changing them is not “CI-specific” and works according to the\nsyntax and semantics known from Docker.\n\nKey Files and Signatures\n========================\n\nThe repository contains key material in directory `dot_gnupg_sample`.\nIt contains public and private keys used for signing Debian packages added to\nthe reprepro repository. As the directory name already implies, they are\nconsidered _sample_ keys and should only be used for testing purposes. Upon\ndeciding to use Ma_Sys.ma CI productively, it is _highly recommended_ to switch\nto independently created and _private_ keys. The script to re-generate\n`dot_gnupg_sample` (with different keys) is provided in\n`regenerate_dot_gnupg_sample.sh`. Note that for most cases, it is recommended\nto generate the keys “manually” rather than using the script as to set a\ndifferent user name, e-mail etc.\n\nLicense\n=======\n\n\tMa_Sys.ma CI 2.0, (c) 2019, 2020, 2023, 2024 Ma_Sys.ma \u003cinfo@masysma.net\u003e.\n\t\n\tThis program is free software: you can redistribute it and/or modify\n\tit under the terms of the GNU General Public License as published by\n\tthe Free Software Foundation, either version 3 of the License, or\n\t(at your option) any later version.\n\t\n\tThis program is distributed in the hope that it will be useful,\n\tbut WITHOUT ANY WARRANTY; without even the implied warranty of\n\tMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n\tGNU General Public License for more details.\n\t\n\tYou should have received a copy of the GNU General Public License\n\talong with this program.  If not, see \u003chttp://www.gnu.org/licenses/\u003e.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fm7a%2Fco-ci","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fm7a%2Fco-ci","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fm7a%2Fco-ci/lists"}