{"id":14063667,"url":"https://github.com/manojlds/YDeliver","last_synced_at":"2025-07-29T16:30:55.420Z","repository":{"id":65895596,"uuid":"2032497","full_name":"manojlds/YDeliver","owner":"manojlds","description":"YDeliver is a (opinionated) build and deployment framework aimed at .NET projects.","archived":false,"fork":false,"pushed_at":"2015-05-22T17:00:52.000Z","size":1708,"stargazers_count":49,"open_issues_count":2,"forks_count":12,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-11-25T06:05:59.121Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://ydeliver.stacktoheap.com/","language":"PowerShell","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/manojlds.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}},"created_at":"2011-07-11T20:35:37.000Z","updated_at":"2024-04-12T14:34:36.000Z","dependencies_parsed_at":"2023-02-15T02:31:57.525Z","dependency_job_id":null,"html_url":"https://github.com/manojlds/YDeliver","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manojlds%2FYDeliver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manojlds%2FYDeliver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manojlds%2FYDeliver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manojlds%2FYDeliver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/manojlds","download_url":"https://codeload.github.com/manojlds/YDeliver/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228028602,"owners_count":17858359,"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":[],"created_at":"2024-08-13T07:03:27.145Z","updated_at":"2024-12-04T01:31:10.145Z","avatar_url":"https://github.com/manojlds.png","language":"PowerShell","funding_links":[],"categories":["PowerShell","Build Tools"],"sub_categories":[],"readme":"# YDeliver\n\nYDeliver is a (opinionated) build and deployment framework aimed at .NET projects.\n\nYDeliver is based on Powershell and the amazing psake framework. It borrows the best practices ( for example, Ydeliver strongly believes in convention over configuration) and tricks from across the industry, with the aim of quickly bootstrapping the build and release process of typical .NET projects. \n\n## Getting Started\n\nYou can include YDeliver as submodule within your project (recommended), or just have it as a Powershell module in your machine to invoke builds off.\n\n```powershell\nImport-Module path\\to\\YDeliver\n```\n\nYou can also install YDeliver as a solution-level package using Nuget / Package manager:\n\n```powershell\nInstall-Package ydeliver\n```\n\n## YBuild\n\nYBuild is the build component of YDeliver. Typically, this component is for compiling, unit testing and packaging your artifacts. YBuild comes with prebuilt tasks to clean and compile your solution, run NUnit tests and package ( zip / nuget) up your artifacts.\n\nFor example, you can run the clean, compile and package tasks by doing \n\n```powershell\nInvoke-YBuild Clean,Compile,Project\n```\nTo get a list of available tasks, you can do:\n\n```powershell\nInvoke-YBuild -listAvailable\n```\n\nYou can override the `build.yml` settings by adding a `-config` parameter to `Invoke-YBuild`. See scaffolded `build.ps1` for example.\n\n## YInstall\n\nYInstall component takes care of \"installing\" the build artifacts - be it zip files, installers, nuget packages etc.\n\nYou can install \"applications\". These can be certain modules within your project - like a service, web app etc or the entire project itself. Each applications is defined to be of certain tasks and the configurations needed to install them. For example:\n\n```yml\nconventions:\n    artifactsDir: \"$rootDir/build\"\n\ninstall:\n    ydeliver: \n        tasks:\n            NugetPublish:\n                config:\n                    packages: [\"ydeliver.*.nupkg\"]\n                    source: \"NuGet official package source\"\n```\n\nThe above configuration in a `install.yml` defines an application `ydeliver`. When you install this application, the task `NugetPublish` is run. The `config` section defines the configuration needed to run the tasks. Here the nuget packages and the nuget feed source are specified.\n\nYou can override the `install.yml` settings by adding a `-config` parameter to `Invoke-YInstall`. See scaffolded `install.ps1` for example.\n\n## YDeploy\n\nComing soon.\n\n## Conventions\n\nYDeliver follows certain conventions, like where to pick up the solution file, how to recognize unit test dlls, etc. These conventions are specified under `Conventions\\Defaults.ps1`\n\nYou can specify your own, or modify the ones provided by the framework by adding the conventions key in the component config ( like build.yml):\n\n```yml\nconventions:\n    framework:  \"3.5x86\"\n    solutionFile:   \"$rootDir/name.sln\"\n```\n\n## Custom Tasks\n\nIf you cannot add your own task directly into the component's task folder ( either because you are using YDeliver as a Nuget package and don't want to touch the installed files, or if your are using YDeliver as a submodule), you can add a file in your project root named `\u003caction\u003e.custom.tasks.ps1` and the tasks from it will be picked up as well.\n\nFor example, if you want to add custom tasks for YBuild, create a file named `build.custom.tasks.ps1` and place it in the root of your project. These task will now be available from `Invoke-YBuild`.\n\n## Configuration\n\nYou can specify configurations like which folders to package into artifacts, which projects to make nuget packages out off etc.\n\n### build.yml\n\nSpecifies the configurations for YBuild\n\n`copyContents` : For specifying files and folders to be copied from one place to another\n`packageContents` : For specifying file and folders to be packages into zip files\n`nugetSpecs` : For specifying the .nuspec files to be used to build nuget packages\n\nSample build.yml:\n\n```yml\ncopyContents:\n    \"$buildPath/cmd.dll\":   \"$buildPath/Cmd\"\n    \"$buildPath/cmd.pdb\":   \"$buildPath/Cmd\"\n    \"$buildPath/test\":      \"$buildPath/Cmd\"\n\npackageContents:\n    \"$buildPath/Cmd\":  \"Cmd.zip\"\n\nnugetSpecs:   [cmd.nuspec]\n```\n##YFlow (work in progress)\n\nYFlow is the developer workflow component. During the course of development, the developers would be running specific tasks at specific times. For example, you may want to run the `dbdeploy` task after updating some migrations. You may want to index solr after updating the config etc. Probably, when you run `dbdeploy`, you *also* want to reindex solr. Sometimes, these tasks may also cut across components ( YBuild, YInstall).\n\nIf you are not using workflows, you may have to do:\n\n```powershell\nInvoke-YBuild dbdeploy\nInvoke-YInstall solr\n```\n\nWith `YFlow`, you can define these as your `workflows`. Scaffold the component to get `workflow.ps1` and `workflows.yml`.\n\n```powershell\nInvoke-YScaffold YFlow\n```\n\n`workflow.yml` for the above scenario will look like this:\n\n```yml\nworkflow:\n    dbsolr:\n        ybuild: [dbdeploy]\n        yinstall: [solr]\n```\n\nNow, you can do:\n\n```powershell\nInvoke-YFlow dbsolr #or\n.\\workflow.ps1 dbsolr\n```\n\nYou can merge the functionalities of `build.ps1` and `workflow.ps1` as appropriate.\n\nNote that `YDeliver` doesn't encourage dependencies between task as specified using psake syntax. We believe it is better being explicit. `YFlow` may be the replacement for this.\n\n## YScaffold\n\nThis component helps you to quickly bootstrap a project's build and deploy. You can scaffold the files and scripts that are used by the different YDeliver component.\n\n```powershell\nInvoke-YScaffold -Component YBuild\n```\nYScaffold will not replace files that already exist unless called with the `-Force` switch.\n\n## What's ahead?\n\nLots more documentation.\nBringing in the deploy component.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanojlds%2FYDeliver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmanojlds%2FYDeliver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanojlds%2FYDeliver/lists"}