{"id":51116441,"url":"https://github.com/oracle-devrel/oci-jet-garage-clock","last_synced_at":"2026-06-24T22:30:31.768Z","repository":{"id":150825514,"uuid":"623119453","full_name":"oracle-devrel/oci-jet-garage-clock","owner":"oracle-devrel","description":"oci-jet-garage-clock","archived":false,"fork":false,"pushed_at":"2024-07-23T20:59:15.000Z","size":5257,"stargazers_count":6,"open_issues_count":2,"forks_count":7,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-04-21T21:53:09.938Z","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":"upl-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oracle-devrel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"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}},"created_at":"2023-04-03T18:27:25.000Z","updated_at":"2025-07-07T15:40:08.000Z","dependencies_parsed_at":"2024-05-16T17:46:33.654Z","dependency_job_id":null,"html_url":"https://github.com/oracle-devrel/oci-jet-garage-clock","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":"oracle-devrel/repo-template","purl":"pkg:github/oracle-devrel/oci-jet-garage-clock","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oracle-devrel%2Foci-jet-garage-clock","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oracle-devrel%2Foci-jet-garage-clock/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oracle-devrel%2Foci-jet-garage-clock/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oracle-devrel%2Foci-jet-garage-clock/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oracle-devrel","download_url":"https://codeload.github.com/oracle-devrel/oci-jet-garage-clock/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oracle-devrel%2Foci-jet-garage-clock/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34752465,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-24T02:00:07.484Z","response_time":106,"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":[],"created_at":"2026-06-24T22:30:28.723Z","updated_at":"2026-06-24T22:30:31.730Z","avatar_url":"https://github.com/oracle-devrel.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# oci-jet-garage-clock\n\n[![License: UPL](https://img.shields.io/badge/license-UPL-green)](https://img.shields.io/badge/license-UPL-green) [![Quality gate](https://sonarcloud.io/api/project_badges/quality_gate?project=oracle-devrel_oci-jet-garage-clock)](https://sonarcloud.io/dashboard?id=oracle-devrel_oci-jet-garage-clock)\n\n## Introduction\nThis step-by-step tutorial focuses on deploying a Preact and JET client-side application to Oracle Cloud Infrastructure (OCI) using Docker. Docker enables lightweight and efficient container instances that eliminate server management, and OCI enables worldwide accessibility. The guide walks you through building a Docker image, pushing it to a Docker registry, and creating a container instance on OCI using the Docker image.\n![app home](doc/images/appHome.png)  \n\n## Getting Started - Deploy Oracle JET app to the Container Instances\n### Compile and push your image  \n- Login to your account on cloud.oracle.com  \n- Open Cloud Shell  \n- Clone this repository with following command\n        `git clone https://github.com/oracle-devrel/oci-jet-garage-clock.git`\n- Open your freshly cloned repository:  \n        `cd oci-jet-garage-clock`  \n- Create docker container:   \n        `docker build -t clock .`  \n- Generate auth token:  \n        `oci iam auth-token create --description \"DEFAULT\" --user-id \u003cpaste user OCID\u003e --query 'data.token' --raw-output`  \n- Echo your _namespace_:  \n        `oci os ns get -c $OCI_TENANCY --query 'data' --raw-output`  \n- Log in to your container registry - replace with xxx with your region  \n        `docker login \u003cpaste your region\u003e.ocir.io`  \n- Input your details  \n        Username:   \n        Password: `\u003cpaste auth token\u003e`\n- Tag your container:  \n        `docker tag clock:latest \u003cpaste your region\u003e.ocir.io/\u003cpaste namespace\u003e/clock:latest`  \n- Push your image to the Container Registry:  \n        `docker push \u003cpaste your region\u003e.ocir.io/\u003cpaste namespace\u003e/clock:latest`\n\n### Deploy Container Instance\nWe will deploy our app using UI, but you can do with Cloud Shell too.\n- Click on _hamburger menu_   \n        ![app home](doc/images/1hamburger.png)  \n- Click on _Developer Services_\n        ![app home](doc/images/2DeveloperServices.png)  \n- Click on _Container Registry_\n        ![app home](doc/images/3AContainerRegistry.png)  \n- Click on and a cog and _Change to public_\n        ![app home](doc/images/3BChangeToPublic.png)  \n- Click on _Container Instances_\n        ![app home](doc/images/3ContainerInstances.png)  \n- Click on _Create container instance_\n        ![app home](doc/images/4CreateContainerInstance.png)  \n- Add _Name_, choose _Compartment_, _Availability domain_, _Shape_, _Virtual cloud network_ and _Subnet_ ( we need to have TCP port 80 opened )\n        ![app home](doc/images/5AddBasicDetails.png)  \n- Click _Next_\n- In Image section click on _Select image_\n        ![app home](doc/images/6ConfigureContainers.png)  \n- Click on _Choose repository_ and select your container - if you cant find you image try changing the compartment to root\n- Pick _Image in repository_, in our case it is latest since this is how we tagged it in our docker push command\n        ![app home](doc/images/7SelectImage.png)  \n- Click on _Select image_\n- Click _Next_\n- Check your settings and click _Create_\n- Wait for your app to deploy\n- Once ready you can copy and paste public IP in your browser and voila your Container Instance is up and running\n        ![app home](doc/images/8Finish.png)  \n\n### Prerequisites\nGeneral knowledge of docker and networking\n\n## Notes\n### Installing local for development \n1. For Development use homebrew or similar package manager to install Oracle JET `brew install --cask jet`\n1. Install Nodejs (latest LTS release would be recommended) From a terminal or command line window.\n2. Globally install http-server NPM module.  `npm -g install http-server`\n3. Unzip the countdown app into some empty folder\n4. From the root of that countdown app folder, `run http-server -o`  (that's a lower case o, not zero)\n\n### Run app for local development\n1. From root folder run `ojet restore` to install environment\n2. To start app run `ojet serve`\n\n### Packaging for distribution\n3. To distribute app run `ojet build --release`\n\n#### ojet restore help\n\tCommand details:\n\n    restore .............................. Restores missing dependencies, plugins, and libraries to a JET app\n\n         [app] ........................... Restores missing dependencies, plugins, and libraries to a JET app\n\n            --secure ..................... Whether to enforce secure HTTPS protocol\n                                           Value: [true|false]\n                                           Default: true\n            --username | u ............... The user's registered username\n            --password | p ............... The user's registered password\n            --ci ......................... Use npm ci instead of npm install\n                                           Default: false\n\nExamples:\n\n    ojet restore\n    ojet restore app\n\n#### ojet serve synopsis:\n\n    ojet serve [\u003cscope\u003e] [\u003cparameter\u003e] [\u003coptions\u003e]\n\nCommand details:\n\n    serve | s ............................ Serves a JET app to an emulator, device or the browser\n\n         [app] ........................... Serves a JET app for the specified platform\n                                           Parameter: [android|ios|windows|web]\n\n            --release | r ................ Serve in release mode\n                                           Value: [true|false]\n            --optimize ................... Specify rjs optimize value\n                                           Value: \u003cstring\u003e\n            --build-config ............... Specify the build config file for signing the hybrid app\n                                           Value: \u003cbuild_config_file\u003e\n            --build ...................... Build the app before serving it\n                                           Value: [true|false](--no-build)\n                                           Default: true\n            --sass ....................... Enable SASS compilation and SASS watch \n                                           Value: [true|false](--no-sass)\n                                           Default: true\n            --server-port ................ Specify the server port\n                                           Value: \u003cinteger\u003e\n                                           Default: 8000\n            --svg ........................ Enable SVG re-compilation for JET Alta Theme\n                                           Value: [true|false]\n                                           Default: false\n            --theme ...................... Specify the theme to be used by the app,\n                                           -\u003e alta themes are platform specific\n                                           -\u003e redwood theme is for all platforms\n                                           Value: \u003ctheme_name\u003e[:\u003cplatform\u003e]\n\n\n#### ojet build synopsis:\n\n\n    ojet build [\u003cscope\u003e] [\u003cparameter\u003e] [\u003coptions\u003e]\n\nCommand details:\n\n    build | b ............................ Builds a JET app\n\n         [app] ........................... Builds a JET app for the specified platform,\n                                           where [app] is the directory context of the JET app.\n                                           \n                                           Parameter: [android|ios|windows|web] - specifies the build platform\n                                           The default platform is 'web'\n\n            --release | r ................ Build in release mode\n                                           Value: [true|false]\n            --optimize ................... Specify rjs optimize value\n                                           Value: \u003cstring\u003e\n            --build-config ............... Specify the build config file for signing the hybrid app\n                                           Value: \u003cbuild_config_file\u003e\n            --sass ....................... Enable SASS compilation\n                                           Value: [true|false](--no-sass)\n                                           Default: true\n            --svg ........................ Enable SVG re-compilation for JET Alta Theme\n                                           Value: [true|false]\n                                           Default: false\n            --theme ...................... Specify the theme to be used by the app,\n                                           -\u003e alta themes are platform specific\n                                           -\u003e redwood theme is for all platforms\n                                           Value: \u003ctheme_name\u003e[:\u003cplatform\u003e]\n                                           where \u003ctheme_name\u003e is: alta or \u003ccustom_theme_name\u003e\n                                           and \u003cplatform\u003e is one of: android, ios, web, windows\n                                           Default: redwood for web platform\n            --themes ..................... Specify multiple themes separated by comma(s)\n                                           When the --theme flag is missing,\n                                           the first element in the --themes flag is identified as the default theme.\n            --cssvars .................... Specify to inject css file which supports css custom properties\n                                           When the --cssvars flag is missing,\n                                           the default css preprocessor has been used to process away the custom properties.\n                                           Value: [enabled|disabled]\n                                           Default: disabled\n            --user-options ............... Specify user-defined options - these are accessible in hooks config object\n                                           Value: \u003cstring\u003e\n\n            Hybrid only:\n\n            --destination ................ Specify the destination for building the app\n                                           Value: device|emulator\n                                           Default: emulator\n            --device ..................... Shortcut for --destination=device\n            --emulator ................... Shortcut for --destination=emulator\n            --platform-options ........... Specify platform specific options that are passed to the Cordova command line\n                                           Value: \u003cplatform_specific_options\u003e\n                                           Use quotes to pass multiple options as a single parameter value\n\n         component ....................... Builds an optimized component for the specified component name\n                                           Use ojet build component component_name to build an optimized component\n                                           Parameter: component name\n\n         pack ............................ Builds an optimized pack for the specified pack name\n                                           Use ojet build pack pack_name to build an optimized pack\n                                           Parameter: pack name\n\nExamples:\n\n    ojet build\n    ojet build --cssvars=enabled\n    ojet build ios --no-sass\n    ojet build android --release\n    ojet build ios --device --build-config=./buildConfig.json --theme=myCustomTheme\n    ojet build web --theme=alta:android\n    ojet build windows --platform-options=\"--archs=\\\"x86 x64 arm\\\"\"\n    ojet build --user-options=\"arbitrary string\" // provide user-defined options\n    ojet build --release --optimize=none // Build a release with readable output. Useful for debugging\n    ojet build component demo-card // component build\n    ojet build pack demo-card-pack // pack build\n\n## Contributing\nThis project is open source.  Please submit your contributions by forking this repository and submitting a pull request!  Oracle appreciates any contributions that are made by the open source community.\n\n## License\nCopyright (c) 2024 Oracle and/or its affiliates.\n\nLicensed under the Universal Permissive License (UPL), Version 1.0.\n\nSee [LICENSE](LICENSE) for more details.\n\nORACLE AND ITS AFFILIATES DO NOT PROVIDE ANY WARRANTY WHATSOEVER, EXPRESS OR IMPLIED, FOR ANY SOFTWARE, MATERIAL OR CONTENT OF ANY KIND CONTAINED OR PRODUCED WITHIN THIS REPOSITORY, AND IN PARTICULAR SPECIFICALLY DISCLAIM ANY AND ALL IMPLIED WARRANTIES OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE.  FURTHERMORE, ORACLE AND ITS AFFILIATES DO NOT REPRESENT THAT ANY CUSTOMARY SECURITY REVIEW HAS BEEN PERFORMED WITH RESPECT TO ANY SOFTWARE, MATERIAL OR CONTENT CONTAINED OR PRODUCED WITHIN THIS REPOSITORY. IN ADDITION, AND WITHOUT LIMITING THE FOREGOING, THIRD PARTIES MAY HAVE POSTED SOFTWARE, MATERIAL OR CONTENT TO THIS REPOSITORY WITHOUT ANY REVIEW. USE AT YOUR OWN RISK. ","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foracle-devrel%2Foci-jet-garage-clock","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foracle-devrel%2Foci-jet-garage-clock","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foracle-devrel%2Foci-jet-garage-clock/lists"}