{"id":46775227,"url":"https://github.com/aws4embeddedlinux/aws4embeddedlinux-ci","last_synced_at":"2026-03-09T23:42:51.911Z","repository":{"id":209010015,"uuid":"685218551","full_name":"aws4embeddedlinux/aws4embeddedlinux-ci","owner":"aws4embeddedlinux","description":null,"archived":false,"fork":false,"pushed_at":"2026-02-18T19:20:19.000Z","size":1097,"stargazers_count":3,"open_issues_count":4,"forks_count":3,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-02-18T23:33:48.116Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit-0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aws4embeddedlinux.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-08-30T19:00:15.000Z","updated_at":"2026-02-18T19:19:05.000Z","dependencies_parsed_at":"2025-02-24T13:34:40.503Z","dependency_job_id":"1bfdb670-ba21-427b-8fab-950a5fa79429","html_url":"https://github.com/aws4embeddedlinux/aws4embeddedlinux-ci","commit_stats":null,"previous_names":["aws4embeddedlinux/aws4embeddedlinux-ci"],"tags_count":2,"template":false,"template_full_name":"amazon-archives/__template_MIT-0","purl":"pkg:github/aws4embeddedlinux/aws4embeddedlinux-ci","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aws4embeddedlinux%2Faws4embeddedlinux-ci","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aws4embeddedlinux%2Faws4embeddedlinux-ci/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aws4embeddedlinux%2Faws4embeddedlinux-ci/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aws4embeddedlinux%2Faws4embeddedlinux-ci/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aws4embeddedlinux","download_url":"https://codeload.github.com/aws4embeddedlinux/aws4embeddedlinux-ci/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aws4embeddedlinux%2Faws4embeddedlinux-ci/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30316775,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-09T20:05:46.299Z","status":"ssl_error","status_checked_at":"2026-03-09T19:57:04.425Z","response_time":61,"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":"2026-03-09T23:42:51.647Z","updated_at":"2026-03-09T23:42:51.888Z","avatar_url":"https://github.com/aws4embeddedlinux.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# aws4embeddedlinux-ci\n\nThe `aws4embeddedlinux-ci` library helps you deploy an AWS cloud infrastructure supporting the Embedded Linux builds for your project using [AWS CDK](https://github.com/aws/aws-cdk).\n\n## Table of Contents\n\n1. [Architecture](#architecture)\n1. [API documentation](#api-documentation)\n1. [Project Build with AWS CodePipeline](#project-build-with-aws-codepipeline)\n1. [Project Build with AWS CodeBuild as Action Runner](#project-build-with-aws-codebuild-as-action-runner)\n1. [Setup](#setup)\n1. [Development Setup](#development-setup)\n1. [Known issues](#known-issues)\n1. [Security](#security)\n1. [Contributing](#contributing)\n1. [License](#license)\n\n## Architecture\n\nThis is the overall architecture pattern used to deploy the build pipeline:\n\n![architecture overview](images/architecture-v0.2.x.svg \"Architecture\")\n\n[Bask to the top](#aws4embeddedlinux-ci)\n\n## API documentation\n\nThe [API documentation](https://aws4embeddedlinux.github.io/aws4embeddedlinux-ci/) is generated automatically using [Typedoc](https://typedoc.org/).\n\n[Bask to the top](#aws4embeddedlinux-ci)\n\n## Project Build with AWS CodePipeline\n\nSeveral pipelines are provided in this library, each one demonstrating a different aspect of how to build a Yocto image with AWS.\n\nOnce deployed, ou can review the pipeline execution from the `Developer Tools \u003e Pipeline - CodePipeline \u003e Pipelines` page in the AWS Console.\n\nFrom the pipeline page, you can find the source repository (S3), the CodeBuild Project (with the build logs), and the S3 bucket that the image is uploaded to, at the end.\n\nEach pipelines will refresh/re-run automatically every week using AWS EventBridge in order to grab the latest updates.\n\n### \u003cins\u003e__Poky__\u003c/ins\u003e\n\nThe pipeline name will end with **`poky`**.\n\nThis example will build the `core-image-minimal` image from Poky using the repo tool to manage layers. CVE checking is also enabled in the buildspec file.\n\n**_Expected build times_**:\n\n- First build: **32 minutes**\n- Rebuild (without any change, just use sstate cache): **8 minutes**\n\n### \u003cins\u003e__Poky EC2 AMI__\u003c/ins\u003e\n\nThe pipeline name will end with **`poky-ami`**.\n\nYocto can be used to create an EC2 AMI. This example builds an AMI based on Poky and meta-aws and exports it to your AMI registry using the [VM Import/Export Service](https://docs.aws.amazon.com/vm-import/latest/userguide/what-is-vmimport.html).\n\n**_Expected build times_**:\n\n- First build: **52 minutes**\n- Rebuild (without any change, just use sstate cache): **17 minutes**\n\n### \u003cins\u003e__Kas__\u003c/ins\u003e\n\nThe pipeline name will end with **`kas`**.\n\nThe Kas example shows how to use a [Kas Config](https://github.com/aws4embeddedlinux/aws4embeddedlinux-ci/blob/main/source-repo/kas/kas.yml) to manage layers.\n\nThis tool can help programatically manage layers and config with tighter Yocto integration than Git Submodules or the Repo tool.\n\n**_Expected build times_**:\n\n- First build: **36 minutes**\n- Rebuild (without any change, just use sstate cache): **11 minutes**\n\n### \u003cins\u003e__QEmu__\u003c/ins\u003e\n\nThe pipeline name will end with **`qemu`**.\n\nThis example builds a Qemu based image using [meta-aws-demos](https://github.com/aws4embeddedlinux/meta-aws-demos).\n\nThe Qemu image can be run in the CodeBuild environment. Using SLIRP networking, [OEQA testing](https://docs.yoctoproject.org/singleindex.html#performing-automated-runtime-testing) such as ptest can be run in the pipeline.\n\n**_Expected build times_**:\n\n- First build: **45 minutes**\n- Rebuild (without any change, just use sstate cache): **14 minutes**\n\n### \u003cins\u003e__NXP / IMX__\u003c/ins\u003e\n\nThe pipeline name will end with **`nxp`**.\n\nThis example will build an image for the [i.MX 6ULL EVK](https://www.nxp.com/design/development-boards/i-mx-evaluation-and-development-boards/evaluation-kit-for-the-i-mx-6ull-and-6ulz-applications-processor:MCIMX6ULL-EVK) board.\n\n**NXP requires users to accept and comply with a EULA in order to build** and, for this reason, **the buildspec will require modification before the build succeeds**.\n\nSee the [IMX Yocto Users Guide](https://www.nxp.com/docs/en/user-guide/IMX_YOCTO_PROJECT_USERS_GUIDE.pdf) for more detail.\n\n**_Expected build times_**:\n\n- First build: **xx minutes**\n- Rebuild (without any change, just use sstate cache): **xx minutes**\n\n### \u003cins\u003e__Renesas__\u003c/ins\u003e\n\nThis example is based on the [Yocto / Renesas R-Car work](https://elinux.org/R-Car/Boards/Yocto-Gen3/v5.9.0) to build an image for Renesas R-Car-H3 Starter Kit Premier board (unofficial name - H3ULCB) including the proprietary graphics and multimedia drivers from Renesas.\n\nYou will need to download the Multimedia and Graphics library and related Linux drivers from the following link (registration necessary):\n\n- https://www.renesas.com/us/en/application/automotive/r-car-h3-m3-h2-m2-e2-documents-software\n\n**Download the following files:**\n\n- R-Car_Gen3_Series_Evaluation_Software_Package_for_Linux-20220121\n- R-Car_Gen3_Series_Evaluation_Software_Package_of_Linux_Drivers-20220121\n\nGraphic drivers are required for Wayland. Multimedia drivers are optional.\n\n**Steps to build the image:**\n\n- Create a folder named `proprietary` in the root of the source repo\n- Copy the downloaded files into the `proprietary` folder\n- Uncomment the `#TODO` line in the `build.sh` file in the source repo\n- Deploy the build pipeline\n\nA build should automatically start. Once it succeeds you will get an image containing the proprietary graphics and multimedia drivers.\n\n**_Expected build times_**:\n\n- First build: **30 minutes**\n- Rebuild (without any change, just use sstate cache): **9 minutes**\n\n[Bask to the top](#aws4embeddedlinux-ci)\n\n\n## Project Build with AWS CodeBuild as Action Runner\n\n\nThis will create an AWS CodeBuild project ready to build Embedded Linux which can be used to connect to an external source, e.g. [GitHub Actions](https://docs.aws.amazon.com/codebuild/latest/userguide/action-runner.html). This is not using any AWS CodePipeline as in the the Pipeline examples section.\n\nYou can use the following [example](https://github.com/aws4embeddedlinux/meta-aws-demos/blob/master/.github/workflows/build-gg.yml) for your GitHub Action.\n\nWe recommend you to clone the created AWS CodeBuild project and then proceed with the GitHub Action configuration.\nHowever, this will result in the use of the same EFS file system across projects.\n\nUsing the AWS CodeBuild project requires a source to be configured manually in the AWS Console at `Developer Tools \u003e Build - CodeBuild \u003e Projects`.\n\nTo configure the AWS CodeBuild source connection to a GitHub repository, you will need to:\n\n- Select the AWS CodeBuild project (`aws4el-ci-codebuild-project`)\n- Select the `Project Details` tab\n- Scroll to the `Source` section and click on **Edit**.\n- Select **`GitHub`** as a **Source provider**. Configure the access to your repository\n- Scroll to the **Primary source webhook events** section, enable **Rebuild every time a code change is pushed to this repository**\n- Expand the **Webhook event filter groups** section and click on **Add filter group** if no group is present, then select **WORKFLOW_JOB_QUEUED** as **Filter group 1**\n\n\nModify your repository GitHub action by replacing the following line:\n```\nruns-on: ${{ vars.CODEBUILD_RUNNER_NAME }}-${{ github.run_id }}-${{ github.run_attempt }}\n```\n\nwith:\n\n```\nruns-on: codebuild-\u003cproject-name\u003e-${{ github.run_id }}-${{ github.run_attempt }}\n```\n\n`\u003cproject-name\u003e` should be replaced by your AWS CodeBuild project name (`aws4el-ci-codebuild-project`).\nThere might be more than one occuerence to replace in the file.\n\nRefer to the following [example](https://github.com/aws4embeddedlinux/meta-aws-demos/blob/master/.github/workflows/build-gg.yml) for more details.\n\n[Bask to the top](#aws4embeddedlinux-ci)\n\n## Setup\n\nIn order to use this library, you must first set up an [AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html) project, including\ninstalling the CDK tool and bootstrapping the account you wish to deploy to.\n\nAdditionally, you must have [NodeJS](https://nodejs.org/en/) installed.\n\n\u003e [!NOTE]\n\u003e\n\u003e This library is tested against Node Versions 22. If these version is not available for your system, we recommend using [NVM](https://github.com/nvm-sh/nvm) to install a compatible version.\n\u003e\n\nYou can also use the [sample project code](https://github.com/aws4embeddedlinux/aws4embeddedlinux-ci-examples) provided to get started and deploy the stacks.\n\n[Bask to the top](#aws4embeddedlinux-ci)\n\n### Setting Up A New Project\n\nIn order to create a new project, you will need to initialize a new CDK project.\n\nMore details can be found in the [CDK Getting Started Documentation](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html).\n\nThe following commands will create a new CDK project named `my-project`:\n\n```bash\nmkdir my-project\ncd my-project\ncdk init app --language typescript\n```\n\nThen you will need to install the CDK library including the `aws4embeddedlinux-ci` library either using `npm`:\n\n```bash\nnpm install aws4embeddedlinux/aws4embeddedlinux-ci\n```\n\nof `yarn':\n\n```bash\nyarn add aws4embeddedlinux-cdk-lib@aws4embeddedlinux/aws4embeddedlinux-ci\nyarn install\n```\n\n\u003e If you are not familliar with Yarn, please refer to the [documentation](https://yarnpkg.com/getting-started).\n\nOnce added, you can start creatin your application using the library.\n\nFor example, you can start by importing classes using:\n\n```ts\nimport {\n  EmbeddedLinuxCodePipelineBaseImageStack,\n  EmbeddedLinuxCodePipelineStack,\n  EmbeddedLinuxCodeBuildProjectStack,\n  PipelineResourcesStack,\n  ProjectType,\n} from \"aws4embeddedlinux-cdk-lib\";\n```\n\nThen deploy the base resources and base image pipeline stacks:\n\n```typescript\nconst pipelineResourcesStack = new PipelineResourcesStack(app, `demo-resources`, {...});\nconst baseImageStack = new EmbeddedLinuxCodePipelineBaseImageStack(app, `demo-pipeline-base-image`, {...});\n```\n\nAnd ultimately deploy the target pipeline:\n```typescript\nconst projectPipeline = new EmbeddedLinuxCodePipelineStack(app, \"demo-project\", {\n  projectType: ProjectType.Poky,\n  ecrRepository: \u003cecrRepository\u003e,\n  ecrRepositoryImageTag: \u003cecrRepositoryImageTag\u003e,\n  pipelineSourceBucket: \u003cSourceBucket\u003e,\n  pipelineArtifactBucket: \u003cArtifactBucket\u003e,\n  pipelineOutputBucket: \u003cOutputBucket\u003e,\n  vpc: \u003cvpc\u003e,\n  encryptionKey: \u003cencryptionKey\u003e,\n});\n```\n\nRefer to the [API Documentation](https://aws4embeddedlinux.github.io/aws4embeddedlinux-ci) and the [sample](https://github.com/aws4embeddedlinux/aws4embeddedlinux-ci-examples) for more details.\n\nOnce you have completed the code of your application, you can deploy the CDK stack using:\n\n```bash\ncdk deploy\n```\n\nAfter the CDK application is successfully deployed, the 'Base Image' pipeline needs to complete successfully.\n\nThis will create an Ubuntu based container for building the Yocto images.\n\n\u003e [!NOTE]\n\u003e\n\u003e This container is used by the other pipelines. If the other pipelines are run before this container is created and pushed to [ECR](https://aws.amazon.com/ecr/), they will fail.\n\u003e\n\u003e The 'Base Image' pipeline will run weekly by default to keep the container patched and up to date.\n\u003e\n\n\u003e [!NOTE]\n\u003e\n\u003e We recommend you to deploy first the 'Base Image' pipeline and once the pipeline completes successfully, then you can deploy the other pipelines in you application as described in the [sample](https://github.com/aws4embeddedlinux/aws4embeddedlinux-ci-examples).\n\u003e\n\nOnce your pipelines completes successfully, the Yocto deploy directory generated content will be pushed into a S3 bucket.\n\n[Bask to the top](#aws4embeddedlinux-ci)\n\n## Development Setup\n\nThe repository is leveraging Yarn 2 and if you are not familliar with Yarn, please refer to the [documentation](https://yarnpkg.com/getting-started).\n\nIf you are looking to develop new feature, you can use [`yarn link`](https://classic.yarnpkg.com/lang/en/docs/cli/link/k) to develop with a local copy of this repo.\n\nIn this library repo, execute the following:\n\n```bash\nyarn install\nyarn run build\nyarn link\n```\n\nand in your project folder:\n\n```bash\nyarn install\nyarn link \"aws4embeddedlinux-cdk-lib\"\nyarn run build\n```\n\nThis will link through the system `node_modules` install.\n\n\u003e _Note:_\n\u003e\n\u003e You should not install / reference the `aws4embeddedlinux/aws4embeddedlinux-ci` library in your `package.json` when using this approach.\n\u003e\n\n\n\u003e _Note:_\n\u003e\n\u003e After changing the code for the `aws4embeddedlinux/aws4embeddedlinux-ci` library, you will need to run `yarn run build` for changes to be available in your current project.\n\u003e\n\n\n\u003e _Note:_\n\u003e\n\u003e When using a system node install on Linux, this can require sudo access.\n\u003e To avoid this, use a [node version manager](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm#using-a-node-version-manager-to-install-nodejs-and-npm) or [set a node prefix](https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally).\n\n### Using Git Credentials and Build Time Secrets\n\n[AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) is the preferred method for adding and using secrets in your pipelines.\n\nThe service provides a structured means of access and avoids the pitfalls of putting secrets in environment variables, source repos, etc.\n\nThe following steps detaisl at a high level, how you can enable the use of AWS Secrets Manager in your pipelines:\n\n- Create a _Secret_ in Secrets Manager and add your secret value.\n- Grant access permissions to the CodeBuild pipeline project.\n- Create a [Policy Statement](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_iam.PolicyStatement.html) which allows `secretsmanager:GetSecretValue` for your secret.\n- Add this policy statement to the `buildPolicyAdditions` props for the `EmbeddedLinuxPipelineStack`. e.g.\n\n  ```typescript\n  import * as iam from \"aws-cdk-lib/aws-iam\";\n  const projectPipeline = new EmbeddedLinuxCodePipelineStack(app, \"MyPokyPipeline\", {\n    projectType: ProjectType.Poky,\n    ecrRepository: \u003cecrRepository\u003e,\n    ecrRepositoryImageTag: \u003cecrRepositoryImageTag\u003e,\n    pipelineSourceBucket: \u003cSourceBucket\u003e,\n    pipelineArtifactBucket: \u003cArtifactBucket\u003e,\n    pipelineOutputBucket: \u003cOutputBucket\u003e,\n    vpc: \u003cvpc\u003e,\n    encryptionKey: \u003cencryptionKey\u003e,\n    buildPolicyAdditions: [\n      iam.PolicyStatement.fromJson({\n        Effect: \"Allow\",\n        Action: \"secretsmanager:GetSecretValue\",\n        Resource:\n          \"arn:aws:secretsmanager:us-west-2:123456789012:secret:my-secret-??????\",\n      }),\n    ],\n  });\n  ```\n\n- The secret can then be used in the CodeBuild Project by adding it to the BuildSpec.\n\n  ```yaml\n  env:\n      secrets-manager:\n          SECRET_VALUE: \"\u003cSecret ARN\u003e\"\n  ```\nSee the [CodeBuild Documentation](https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html) for more details.\n\n### CVE Checking With Yocto\n\nCVE checking is enabled in the reference implementations. Details on this can be found in the [Yocto documentation](https://docs.yoctoproject.org/4.0.13/singleindex.html#checking-for-vulnerabilities).\n\n[Bask to the top](#aws4embeddedlinux-ci)\n\n## Known issues\n\n- The use of this CDK library is currently not supported in Windows environments (you can still use WSL).\n- When using AWS Cloud9, a micro instance type will run out of memory.\n- Deletion of stacks while a CodePipeline is running can lead to unexpected behaviours.\n- The NXP-IMX pipeline will fail unless you adjust the build spec file and address the licence acceptance requirement.\n\n[Bask to the top](#aws4embeddedlinux-ci)\n\n## Security\n\nSee [SECURITY](SECURITY.md) for more information about reporting issues with this project.\n\n[Bask to the top](#aws4embeddedlinux-ci)\n\n## Contributing\n\nSee [CONTRIBUTING](CONTRIBUTING.md) for more information.\n\n[Bask to the top](#aws4embeddedlinux-ci)\n\n## License\n\nThis library is licensed under the MIT-0 License. See the [LICENSE](LICENSE) file.\n\n[Bask to the top](#aws4embeddedlinux-ci)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faws4embeddedlinux%2Faws4embeddedlinux-ci","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faws4embeddedlinux%2Faws4embeddedlinux-ci","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faws4embeddedlinux%2Faws4embeddedlinux-ci/lists"}