{"id":26426424,"url":"https://github.com/pavelsr/dfcpp","last_synced_at":"2025-07-26T16:11:11.447Z","repository":{"id":67319391,"uuid":"120229302","full_name":"pavelsr/dfcpp","owner":"pavelsr","description":"dfcpp - Docker File Cpanfile Post Processing","archived":false,"fork":false,"pushed_at":"2018-02-04T22:44:01.000Z","size":2,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-18T03:34:08.341Z","etag":null,"topics":["cpan","cpanfile","docker","docker-images","dockerfile","perl","post-processing","post-processor"],"latest_commit_sha":null,"homepage":null,"language":"Perl","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pavelsr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2018-02-04T22:31:19.000Z","updated_at":"2018-02-04T22:34:41.000Z","dependencies_parsed_at":null,"dependency_job_id":"0b9d713a-1ff8-444b-bc62-40bf338131c2","html_url":"https://github.com/pavelsr/dfcpp","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/pavelsr/dfcpp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pavelsr%2Fdfcpp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pavelsr%2Fdfcpp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pavelsr%2Fdfcpp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pavelsr%2Fdfcpp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pavelsr","download_url":"https://codeload.github.com/pavelsr/dfcpp/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pavelsr%2Fdfcpp/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267191053,"owners_count":24050318,"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","status":"online","status_checked_at":"2025-07-26T02:00:08.937Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["cpan","cpanfile","docker","docker-images","dockerfile","perl","post-processing","post-processor"],"created_at":"2025-03-18T03:29:52.249Z","updated_at":"2025-07-26T16:11:11.441Z","avatar_url":"https://github.com/pavelsr.png","language":"Perl","readme":"# `dfcpp` - Dockerfile post-processing by cpanfile.\n\nAutomatically creates separate docker layer for each Perl module, mentioned in cpanfile\n\nSimple console utility for Perl developers. Saves time when debugging\nwhat is wrong during docker container build.\n\n# Problem\n\nIt's not possible to run container from layer\ncorresponding to last failed module.\n\nSometimes you are getting module install error,\nlike `Installing WWW::Telegram::BotAPI failed`.\n\nIt's bit of complicated to define the reason\nbecause `cpanm` puts info about error in a separate file,\nlike `/root/.cpanm/work/1517580036.144/build.log`,\nbut you can't access this file in case of Docker container build\nsince Docker doesn't save result of failed build.\n\n`dfcpp` auto-rewrites Dockerfile so that each module\nis installing by separate command\n(like `RUN cpanm WWW::Telegram::BotAPI`),\nso in new layer (each Dockerfile command = separate layer),\ninstead of installing modules batch way\n(like `cpanm --installdeps .`) in a single layer.\n\nThis approach saves much time if you have a lot of modules.\n\nTo troubleshot you just need to run stopped container,\nwhich is the result of last successfully executed command in Dockerfile\n( = last successfully installed module).\n\n# Example\n\nDockerfile:\n\n```\nRUN apk update \u0026\u0026 \\\n...\ncpanm --installdeps . \u0026\u0026 \\\n...\n```\n\ncpanfile:\n\n```\nrequires 'List::MoreUtils';\nrequires 'Mojolicious::Lite';\nrequires 'MongoDB';\nrequires 'WWW::Telegram::BotAPI';\n```\n\nresulted Dockerfile:\n\n```\nRUN cpanm List::MoreUtils\nRUN cpanm Mojolicious::Lite\nRUN cpanm MongoDB\nRUN cpanm WWW::Telegram::BotAPI\n```\n\n# Installing\n\n\n## From Github directly using wget, without git clone\n\n```\nwget https://raw.githubusercontent.com/pavelsr/dfcpp/master/dfcpp.pl -O /usr/bin/dfcpp\nchmod +x /usr/bin/dfcpp\n```\n\n## For local testing and developing after git clone\n\n```\nsudo ln -s ${PWD}/dfcpp.pl /usr/bin/dfcpp\nchmod +x /usr/bin/dfcpp\n```\n\n# TO DO\n\n* --help or man\n* undo changes\n* Python (requirements.txt), Nodejs (package.json) and other languages\n* Show latest stopped docker container\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpavelsr%2Fdfcpp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpavelsr%2Fdfcpp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpavelsr%2Fdfcpp/lists"}