├── .gitignore ├── Code ├── 02 Basics │ ├── 01 First Workflow │ │ ├── .github │ │ │ └── workflows │ │ │ │ └── first-action.yml │ │ └── README.md │ ├── 02 Starting Project │ │ ├── .gitignore │ │ ├── index.html │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── public │ │ │ └── vite.svg │ │ ├── src │ │ │ ├── App.jsx │ │ │ ├── assets │ │ │ │ └── images │ │ │ │ │ └── logo.png │ │ │ ├── components │ │ │ │ ├── HelpArea.css │ │ │ │ ├── HelpArea.jsx │ │ │ │ ├── HelpBox.css │ │ │ │ ├── HelpBox.jsx │ │ │ │ ├── MainContent.jsx │ │ │ │ └── MainContent.test.jsx │ │ │ ├── index.css │ │ │ ├── main.jsx │ │ │ └── test │ │ │ │ └── setup.js │ │ └── vite.config.js │ ├── 03 Finished Project │ │ ├── .github │ │ │ └── workflows │ │ │ │ ├── deployment.yml │ │ │ │ └── output.yml │ │ ├── .gitignore │ │ ├── index.html │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── public │ │ │ └── vite.svg │ │ ├── src │ │ │ ├── App.jsx │ │ │ ├── assets │ │ │ │ └── images │ │ │ │ │ └── logo.png │ │ │ ├── components │ │ │ │ ├── HelpArea.css │ │ │ │ ├── HelpArea.jsx │ │ │ │ ├── HelpBox.css │ │ │ │ ├── HelpBox.jsx │ │ │ │ ├── MainContent.jsx │ │ │ │ └── MainContent.test.jsx │ │ │ ├── index.css │ │ │ ├── main.jsx │ │ │ └── test │ │ │ │ └── setup.js │ │ └── vite.config.js │ ├── 04 Practice Project (Start) │ │ ├── .eslintrc.json │ │ ├── .gitignore │ │ ├── index.html │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── public │ │ │ └── vite.svg │ │ ├── src │ │ │ ├── App.jsx │ │ │ ├── assets │ │ │ │ └── images │ │ │ │ │ └── logo.png │ │ │ ├── components │ │ │ │ ├── HelpArea.css │ │ │ │ ├── HelpArea.jsx │ │ │ │ ├── HelpBox.css │ │ │ │ ├── HelpBox.jsx │ │ │ │ ├── MainContent.jsx │ │ │ │ └── MainContent.test.jsx │ │ │ ├── index.css │ │ │ ├── main.jsx │ │ │ └── test │ │ │ │ └── setup.js │ │ └── vite.config.js │ └── 05 Practice Project (Finished) │ │ ├── .eslintrc.json │ │ ├── .github │ │ └── workflows │ │ │ ├── deployment1.yaml │ │ │ ├── deployment2.yaml │ │ │ └── issues.yml │ │ ├── .gitignore │ │ ├── index.html │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── public │ │ └── vite.svg │ │ ├── src │ │ ├── App.jsx │ │ ├── assets │ │ │ └── images │ │ │ │ └── logo.png │ │ ├── components │ │ │ ├── HelpArea.css │ │ │ ├── HelpArea.jsx │ │ │ ├── HelpBox.css │ │ │ ├── HelpBox.jsx │ │ │ ├── MainContent.jsx │ │ │ └── MainContent.test.jsx │ │ ├── index.css │ │ ├── main.jsx │ │ └── test │ │ │ └── setup.js │ │ └── vite.config.js ├── 03 Events │ ├── 01 Starting Project │ │ ├── .eslintrc.json │ │ ├── .github │ │ │ └── workflows │ │ │ │ └── demo1.yml │ │ ├── .gitignore │ │ ├── index.html │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── public │ │ │ └── vite.svg │ │ ├── src │ │ │ ├── App.jsx │ │ │ ├── assets │ │ │ │ └── images │ │ │ │ │ └── logo.png │ │ │ ├── components │ │ │ │ ├── HelpArea.css │ │ │ │ ├── HelpArea.jsx │ │ │ │ ├── HelpBox.css │ │ │ │ ├── HelpBox.jsx │ │ │ │ ├── MainContent.jsx │ │ │ │ └── MainContent.test.jsx │ │ │ ├── index.css │ │ │ ├── main.jsx │ │ │ └── test │ │ │ │ └── setup.js │ │ └── vite.config.js │ └── 02 Finished Project │ │ ├── .eslintrc.json │ │ ├── .github │ │ └── workflows │ │ │ └── demo1.yml │ │ ├── .gitignore │ │ ├── index.html │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── public │ │ └── vite.svg │ │ ├── src │ │ ├── App.jsx │ │ ├── assets │ │ │ └── images │ │ │ │ └── logo.png │ │ ├── components │ │ │ ├── HelpArea.css │ │ │ ├── HelpArea.jsx │ │ │ ├── HelpBox.css │ │ │ ├── HelpBox.jsx │ │ │ ├── MainContent.jsx │ │ │ └── MainContent.test.jsx │ │ ├── index.css │ │ ├── main.jsx │ │ └── test │ │ │ └── setup.js │ │ └── vite.config.js ├── 04 Artifacts & Outputs │ ├── 01 Starting Project │ │ ├── .eslintrc.json │ │ ├── .github │ │ │ └── workflows │ │ │ │ └── demo.yml │ │ ├── .gitignore │ │ ├── index.html │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── public │ │ │ └── vite.svg │ │ ├── src │ │ │ ├── App.jsx │ │ │ ├── assets │ │ │ │ └── images │ │ │ │ │ └── logo.png │ │ │ ├── components │ │ │ │ ├── HelpArea.css │ │ │ │ ├── HelpArea.jsx │ │ │ │ ├── HelpBox.css │ │ │ │ ├── HelpBox.jsx │ │ │ │ ├── MainContent.jsx │ │ │ │ └── MainContent.test.jsx │ │ │ ├── index.css │ │ │ ├── main.jsx │ │ │ └── test │ │ │ │ └── setup.js │ │ └── vite.config.js │ ├── 02 Extra Files │ │ └── command.txt │ └── 03 Finished Project │ │ ├── .eslintrc.json │ │ ├── .github │ │ └── workflows │ │ │ └── demo.yml │ │ ├── .gitignore │ │ ├── index.html │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── public │ │ └── vite.svg │ │ ├── src │ │ ├── App.jsx │ │ ├── assets │ │ │ └── images │ │ │ │ └── logo.png │ │ ├── components │ │ │ ├── HelpArea.css │ │ │ ├── HelpArea.jsx │ │ │ ├── HelpBox.css │ │ │ ├── HelpBox.jsx │ │ │ ├── MainContent.jsx │ │ │ └── MainContent.test.jsx │ │ ├── index.css │ │ ├── main.jsx │ │ └── test │ │ │ └── setup.js │ │ └── vite.config.js ├── 05 Environment Variables & Secrets │ ├── 01 Starting Project │ │ ├── .github │ │ │ └── workflows │ │ │ │ └── deploy.yml │ │ ├── .gitignore │ │ ├── app.js │ │ ├── data │ │ │ └── database.js │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── playwright.config.js │ │ ├── routes │ │ │ └── events.js │ │ └── tests │ │ │ └── events-api.spec.js │ └── 02 Finished Project │ │ ├── .github │ │ └── workflows │ │ │ └── deploy.yml │ │ ├── .gitignore │ │ ├── app.js │ │ ├── data │ │ └── database.js │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── playwright.config.js │ │ ├── routes │ │ └── events.js │ │ └── tests │ │ └── events-api.spec.js ├── 06 Execution Flow │ ├── 01 Starting Project │ │ ├── .eslintrc.json │ │ ├── .github │ │ │ └── workflows │ │ │ │ └── execution-flow.yml │ │ ├── .gitignore │ │ ├── index.html │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── public │ │ │ └── vite.svg │ │ ├── src │ │ │ ├── App.jsx │ │ │ ├── assets │ │ │ │ └── images │ │ │ │ │ └── logo.png │ │ │ ├── components │ │ │ │ ├── HelpArea.css │ │ │ │ ├── HelpArea.jsx │ │ │ │ ├── HelpBox.css │ │ │ │ ├── HelpBox.jsx │ │ │ │ ├── MainContent.jsx │ │ │ │ └── MainContent.test.jsx │ │ │ ├── index.css │ │ │ ├── main.jsx │ │ │ └── test │ │ │ │ └── setup.js │ │ ├── test.json │ │ └── vite.config.js │ └── 02 Finished Project │ │ ├── .eslintrc.json │ │ ├── .github │ │ └── workflows │ │ │ ├── continue.yml │ │ │ ├── execution-flow.yml │ │ │ ├── matrix.yml │ │ │ ├── reusable.yml │ │ │ └── use-reuse.yml │ │ ├── .gitignore │ │ ├── index.html │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── public │ │ └── vite.svg │ │ ├── src │ │ ├── App.jsx │ │ ├── assets │ │ │ └── images │ │ │ │ └── logo.png │ │ ├── components │ │ │ ├── HelpArea.css │ │ │ ├── HelpArea.jsx │ │ │ ├── HelpBox.css │ │ │ ├── HelpBox.jsx │ │ │ ├── MainContent.jsx │ │ │ └── MainContent.test.jsx │ │ ├── index.css │ │ ├── main.jsx │ │ └── test │ │ │ └── setup.js │ │ ├── test.json │ │ └── vite.config.js ├── 07 Containers │ ├── 01 Starting Project │ │ ├── .github │ │ │ └── workflows │ │ │ │ └── deploy.yml │ │ ├── .gitignore │ │ ├── .vscode │ │ │ └── settings.json │ │ ├── Dockerfile │ │ ├── app.js │ │ ├── data │ │ │ └── database.js │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── playwright.config.js │ │ ├── routes │ │ │ └── events.js │ │ └── tests │ │ │ └── events-api.spec.js │ └── 02 Finished Project │ │ ├── .github │ │ └── workflows │ │ │ └── deploy.yml │ │ ├── .gitignore │ │ ├── .vscode │ │ └── settings.json │ │ ├── Dockerfile │ │ ├── app.js │ │ ├── data │ │ └── database.js │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── playwright.config.js │ │ ├── routes │ │ └── events.js │ │ └── tests │ │ └── events-api.spec.js ├── 08 Custom Actions │ ├── 01 Starting Project │ │ ├── .eslintrc.json │ │ ├── .github │ │ │ └── workflows │ │ │ │ └── deploy.yml │ │ ├── .gitignore │ │ ├── index.html │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── public │ │ │ └── vite.svg │ │ ├── src │ │ │ ├── App.jsx │ │ │ ├── assets │ │ │ │ └── images │ │ │ │ │ └── logo.png │ │ │ ├── components │ │ │ │ ├── HelpArea.css │ │ │ │ ├── HelpArea.jsx │ │ │ │ ├── HelpBox.css │ │ │ │ ├── HelpBox.jsx │ │ │ │ ├── MainContent.jsx │ │ │ │ └── MainContent.test.jsx │ │ │ ├── index.css │ │ │ ├── main.jsx │ │ │ └── test │ │ │ │ └── setup.js │ │ ├── test.json │ │ └── vite.config.js │ ├── 02 Docker Code │ │ ├── .eslintrc.json │ │ ├── .github │ │ │ ├── actions │ │ │ │ ├── cached-deps │ │ │ │ │ └── action.yml │ │ │ │ ├── deploy-s3-docker │ │ │ │ │ ├── Dockerfile │ │ │ │ │ ├── deployment.py │ │ │ │ │ └── requirements.txt │ │ │ │ └── deploy-s3-javascript │ │ │ │ │ ├── action.yml │ │ │ │ │ ├── main.js │ │ │ │ │ ├── package-lock.json │ │ │ │ │ └── package.json │ │ │ └── workflows │ │ │ │ └── deploy.yml │ │ ├── .gitignore │ │ ├── index.html │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── public │ │ │ └── vite.svg │ │ ├── src │ │ │ ├── App.jsx │ │ │ ├── assets │ │ │ │ └── images │ │ │ │ │ └── logo.png │ │ │ ├── components │ │ │ │ ├── HelpArea.css │ │ │ │ ├── HelpArea.jsx │ │ │ │ ├── HelpBox.css │ │ │ │ ├── HelpBox.jsx │ │ │ │ ├── MainContent.jsx │ │ │ │ └── MainContent.test.jsx │ │ │ ├── index.css │ │ │ ├── main.jsx │ │ │ └── test │ │ │ │ └── setup.js │ │ ├── test.json │ │ └── vite.config.js │ └── 03 Finished Project │ │ ├── .eslintrc.json │ │ ├── .github │ │ ├── actions │ │ │ ├── cached-deps │ │ │ │ └── action.yml │ │ │ ├── deploy-s3-docker │ │ │ │ ├── Dockerfile │ │ │ │ ├── action.yml │ │ │ │ ├── deployment.py │ │ │ │ └── requirements.txt │ │ │ └── deploy-s3-javascript │ │ │ │ ├── action.yml │ │ │ │ ├── main.js │ │ │ │ ├── node_modules │ │ │ │ ├── .bin │ │ │ │ │ └── uuid │ │ │ │ ├── .package-lock.json │ │ │ │ ├── @actions │ │ │ │ │ ├── core │ │ │ │ │ │ ├── LICENSE.md │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── lib │ │ │ │ │ │ │ ├── command.d.ts │ │ │ │ │ │ │ ├── command.js │ │ │ │ │ │ │ ├── command.js.map │ │ │ │ │ │ │ ├── core.d.ts │ │ │ │ │ │ │ ├── core.js │ │ │ │ │ │ │ ├── core.js.map │ │ │ │ │ │ │ ├── file-command.d.ts │ │ │ │ │ │ │ ├── file-command.js │ │ │ │ │ │ │ ├── file-command.js.map │ │ │ │ │ │ │ ├── oidc-utils.d.ts │ │ │ │ │ │ │ ├── oidc-utils.js │ │ │ │ │ │ │ ├── oidc-utils.js.map │ │ │ │ │ │ │ ├── path-utils.d.ts │ │ │ │ │ │ │ ├── path-utils.js │ │ │ │ │ │ │ ├── path-utils.js.map │ │ │ │ │ │ │ ├── summary.d.ts │ │ │ │ │ │ │ ├── summary.js │ │ │ │ │ │ │ ├── summary.js.map │ │ │ │ │ │ │ ├── utils.d.ts │ │ │ │ │ │ │ ├── utils.js │ │ │ │ │ │ │ └── utils.js.map │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── exec │ │ │ │ │ │ ├── LICENSE.md │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── lib │ │ │ │ │ │ │ ├── exec.d.ts │ │ │ │ │ │ │ ├── exec.js │ │ │ │ │ │ │ ├── exec.js.map │ │ │ │ │ │ │ ├── interfaces.d.ts │ │ │ │ │ │ │ ├── interfaces.js │ │ │ │ │ │ │ ├── interfaces.js.map │ │ │ │ │ │ │ ├── toolrunner.d.ts │ │ │ │ │ │ │ ├── toolrunner.js │ │ │ │ │ │ │ └── toolrunner.js.map │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── github │ │ │ │ │ │ ├── LICENSE.md │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── lib │ │ │ │ │ │ │ ├── context.d.ts │ │ │ │ │ │ │ ├── context.js │ │ │ │ │ │ │ ├── context.js.map │ │ │ │ │ │ │ ├── github.d.ts │ │ │ │ │ │ │ ├── github.js │ │ │ │ │ │ │ ├── github.js.map │ │ │ │ │ │ │ ├── interfaces.d.ts │ │ │ │ │ │ │ ├── interfaces.js │ │ │ │ │ │ │ ├── interfaces.js.map │ │ │ │ │ │ │ ├── internal │ │ │ │ │ │ │ │ ├── utils.d.ts │ │ │ │ │ │ │ │ ├── utils.js │ │ │ │ │ │ │ │ └── utils.js.map │ │ │ │ │ │ │ ├── utils.d.ts │ │ │ │ │ │ │ ├── utils.js │ │ │ │ │ │ │ └── utils.js.map │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── http-client │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── lib │ │ │ │ │ │ │ ├── auth.d.ts │ │ │ │ │ │ │ ├── auth.js │ │ │ │ │ │ │ ├── auth.js.map │ │ │ │ │ │ │ ├── index.d.ts │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ ├── index.js.map │ │ │ │ │ │ │ ├── interfaces.d.ts │ │ │ │ │ │ │ ├── interfaces.js │ │ │ │ │ │ │ ├── interfaces.js.map │ │ │ │ │ │ │ ├── proxy.d.ts │ │ │ │ │ │ │ ├── proxy.js │ │ │ │ │ │ │ └── proxy.js.map │ │ │ │ │ │ └── package.json │ │ │ │ │ └── io │ │ │ │ │ │ ├── LICENSE.md │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── lib │ │ │ │ │ │ ├── io-util.d.ts │ │ │ │ │ │ ├── io-util.js │ │ │ │ │ │ ├── io-util.js.map │ │ │ │ │ │ ├── io.d.ts │ │ │ │ │ │ ├── io.js │ │ │ │ │ │ └── io.js.map │ │ │ │ │ │ └── package.json │ │ │ │ ├── @octokit │ │ │ │ │ ├── auth-token │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── dist-node │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ └── index.js.map │ │ │ │ │ │ ├── dist-src │ │ │ │ │ │ │ ├── auth.js │ │ │ │ │ │ │ ├── hook.js │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ ├── types.js │ │ │ │ │ │ │ └── with-authorization-prefix.js │ │ │ │ │ │ ├── dist-types │ │ │ │ │ │ │ ├── auth.d.ts │ │ │ │ │ │ │ ├── hook.d.ts │ │ │ │ │ │ │ ├── index.d.ts │ │ │ │ │ │ │ ├── types.d.ts │ │ │ │ │ │ │ └── with-authorization-prefix.d.ts │ │ │ │ │ │ ├── dist-web │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ └── index.js.map │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── core │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── dist-node │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ └── index.js.map │ │ │ │ │ │ ├── dist-src │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ ├── types.js │ │ │ │ │ │ │ └── version.js │ │ │ │ │ │ ├── dist-types │ │ │ │ │ │ │ ├── index.d.ts │ │ │ │ │ │ │ ├── types.d.ts │ │ │ │ │ │ │ └── version.d.ts │ │ │ │ │ │ ├── dist-web │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ └── index.js.map │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── endpoint │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── dist-node │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ └── index.js.map │ │ │ │ │ │ ├── dist-src │ │ │ │ │ │ │ ├── defaults.js │ │ │ │ │ │ │ ├── endpoint-with-defaults.js │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ ├── merge.js │ │ │ │ │ │ │ ├── parse.js │ │ │ │ │ │ │ ├── util │ │ │ │ │ │ │ │ ├── add-query-parameters.js │ │ │ │ │ │ │ │ ├── extract-url-variable-names.js │ │ │ │ │ │ │ │ ├── lowercase-keys.js │ │ │ │ │ │ │ │ ├── merge-deep.js │ │ │ │ │ │ │ │ ├── omit.js │ │ │ │ │ │ │ │ ├── remove-undefined-properties.js │ │ │ │ │ │ │ │ └── url-template.js │ │ │ │ │ │ │ ├── version.js │ │ │ │ │ │ │ └── with-defaults.js │ │ │ │ │ │ ├── dist-types │ │ │ │ │ │ │ ├── defaults.d.ts │ │ │ │ │ │ │ ├── endpoint-with-defaults.d.ts │ │ │ │ │ │ │ ├── index.d.ts │ │ │ │ │ │ │ ├── merge.d.ts │ │ │ │ │ │ │ ├── parse.d.ts │ │ │ │ │ │ │ ├── util │ │ │ │ │ │ │ │ ├── add-query-parameters.d.ts │ │ │ │ │ │ │ │ ├── extract-url-variable-names.d.ts │ │ │ │ │ │ │ │ ├── lowercase-keys.d.ts │ │ │ │ │ │ │ │ ├── merge-deep.d.ts │ │ │ │ │ │ │ │ ├── omit.d.ts │ │ │ │ │ │ │ │ ├── remove-undefined-properties.d.ts │ │ │ │ │ │ │ │ └── url-template.d.ts │ │ │ │ │ │ │ ├── version.d.ts │ │ │ │ │ │ │ └── with-defaults.d.ts │ │ │ │ │ │ ├── dist-web │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ └── index.js.map │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── graphql │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── dist-node │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ └── index.js.map │ │ │ │ │ │ ├── dist-src │ │ │ │ │ │ │ ├── error.js │ │ │ │ │ │ │ ├── graphql.js │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ ├── types.js │ │ │ │ │ │ │ ├── version.js │ │ │ │ │ │ │ └── with-defaults.js │ │ │ │ │ │ ├── dist-types │ │ │ │ │ │ │ ├── error.d.ts │ │ │ │ │ │ │ ├── graphql.d.ts │ │ │ │ │ │ │ ├── index.d.ts │ │ │ │ │ │ │ ├── types.d.ts │ │ │ │ │ │ │ ├── version.d.ts │ │ │ │ │ │ │ └── with-defaults.d.ts │ │ │ │ │ │ ├── dist-web │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ └── index.js.map │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── openapi-types │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── types.d.ts │ │ │ │ │ ├── plugin-paginate-rest │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── dist-node │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ └── index.js.map │ │ │ │ │ │ ├── dist-src │ │ │ │ │ │ │ ├── compose-paginate.js │ │ │ │ │ │ │ ├── generated │ │ │ │ │ │ │ │ └── paginating-endpoints.js │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ ├── iterator.js │ │ │ │ │ │ │ ├── normalize-paginated-list-response.js │ │ │ │ │ │ │ ├── paginate.js │ │ │ │ │ │ │ ├── paginating-endpoints.js │ │ │ │ │ │ │ ├── types.js │ │ │ │ │ │ │ └── version.js │ │ │ │ │ │ ├── dist-types │ │ │ │ │ │ │ ├── compose-paginate.d.ts │ │ │ │ │ │ │ ├── generated │ │ │ │ │ │ │ │ └── paginating-endpoints.d.ts │ │ │ │ │ │ │ ├── index.d.ts │ │ │ │ │ │ │ ├── iterator.d.ts │ │ │ │ │ │ │ ├── normalize-paginated-list-response.d.ts │ │ │ │ │ │ │ ├── paginate.d.ts │ │ │ │ │ │ │ ├── paginating-endpoints.d.ts │ │ │ │ │ │ │ ├── types.d.ts │ │ │ │ │ │ │ └── version.d.ts │ │ │ │ │ │ ├── dist-web │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ └── index.js.map │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── plugin-rest-endpoint-methods │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── dist-node │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ └── index.js.map │ │ │ │ │ │ ├── dist-src │ │ │ │ │ │ │ ├── endpoints-to-methods.js │ │ │ │ │ │ │ ├── generated │ │ │ │ │ │ │ │ ├── endpoints.js │ │ │ │ │ │ │ │ ├── method-types.js │ │ │ │ │ │ │ │ └── parameters-and-response-types.js │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ ├── types.js │ │ │ │ │ │ │ └── version.js │ │ │ │ │ │ ├── dist-types │ │ │ │ │ │ │ ├── endpoints-to-methods.d.ts │ │ │ │ │ │ │ ├── generated │ │ │ │ │ │ │ │ ├── endpoints.d.ts │ │ │ │ │ │ │ │ ├── method-types.d.ts │ │ │ │ │ │ │ │ └── parameters-and-response-types.d.ts │ │ │ │ │ │ │ ├── index.d.ts │ │ │ │ │ │ │ ├── types.d.ts │ │ │ │ │ │ │ └── version.d.ts │ │ │ │ │ │ ├── dist-web │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ └── index.js.map │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── request-error │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── dist-node │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ └── index.js.map │ │ │ │ │ │ ├── dist-src │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ └── types.js │ │ │ │ │ │ ├── dist-types │ │ │ │ │ │ │ ├── index.d.ts │ │ │ │ │ │ │ └── types.d.ts │ │ │ │ │ │ ├── dist-web │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ └── index.js.map │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── request │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── dist-node │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ └── index.js.map │ │ │ │ │ │ ├── dist-src │ │ │ │ │ │ │ ├── fetch-wrapper.js │ │ │ │ │ │ │ ├── get-buffer-response.js │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ ├── version.js │ │ │ │ │ │ │ └── with-defaults.js │ │ │ │ │ │ ├── dist-types │ │ │ │ │ │ │ ├── fetch-wrapper.d.ts │ │ │ │ │ │ │ ├── get-buffer-response.d.ts │ │ │ │ │ │ │ ├── index.d.ts │ │ │ │ │ │ │ ├── version.d.ts │ │ │ │ │ │ │ └── with-defaults.d.ts │ │ │ │ │ │ ├── dist-web │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ └── index.js.map │ │ │ │ │ │ └── package.json │ │ │ │ │ └── types │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── dist-node │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ └── index.js.map │ │ │ │ │ │ ├── dist-src │ │ │ │ │ │ ├── AuthInterface.js │ │ │ │ │ │ ├── EndpointDefaults.js │ │ │ │ │ │ ├── EndpointInterface.js │ │ │ │ │ │ ├── EndpointOptions.js │ │ │ │ │ │ ├── Fetch.js │ │ │ │ │ │ ├── GetResponseTypeFromEndpointMethod.js │ │ │ │ │ │ ├── OctokitResponse.js │ │ │ │ │ │ ├── RequestError.js │ │ │ │ │ │ ├── RequestHeaders.js │ │ │ │ │ │ ├── RequestInterface.js │ │ │ │ │ │ ├── RequestMethod.js │ │ │ │ │ │ ├── RequestOptions.js │ │ │ │ │ │ ├── RequestParameters.js │ │ │ │ │ │ ├── RequestRequestOptions.js │ │ │ │ │ │ ├── ResponseHeaders.js │ │ │ │ │ │ ├── Route.js │ │ │ │ │ │ ├── Signal.js │ │ │ │ │ │ ├── StrategyInterface.js │ │ │ │ │ │ ├── Url.js │ │ │ │ │ │ ├── VERSION.js │ │ │ │ │ │ ├── generated │ │ │ │ │ │ │ └── Endpoints.js │ │ │ │ │ │ └── index.js │ │ │ │ │ │ ├── dist-types │ │ │ │ │ │ ├── AuthInterface.d.ts │ │ │ │ │ │ ├── EndpointDefaults.d.ts │ │ │ │ │ │ ├── EndpointInterface.d.ts │ │ │ │ │ │ ├── EndpointOptions.d.ts │ │ │ │ │ │ ├── Fetch.d.ts │ │ │ │ │ │ ├── GetResponseTypeFromEndpointMethod.d.ts │ │ │ │ │ │ ├── OctokitResponse.d.ts │ │ │ │ │ │ ├── RequestError.d.ts │ │ │ │ │ │ ├── RequestHeaders.d.ts │ │ │ │ │ │ ├── RequestInterface.d.ts │ │ │ │ │ │ ├── RequestMethod.d.ts │ │ │ │ │ │ ├── RequestOptions.d.ts │ │ │ │ │ │ ├── RequestParameters.d.ts │ │ │ │ │ │ ├── RequestRequestOptions.d.ts │ │ │ │ │ │ ├── ResponseHeaders.d.ts │ │ │ │ │ │ ├── Route.d.ts │ │ │ │ │ │ ├── Signal.d.ts │ │ │ │ │ │ ├── StrategyInterface.d.ts │ │ │ │ │ │ ├── Url.d.ts │ │ │ │ │ │ ├── VERSION.d.ts │ │ │ │ │ │ ├── generated │ │ │ │ │ │ │ └── Endpoints.d.ts │ │ │ │ │ │ └── index.d.ts │ │ │ │ │ │ ├── dist-web │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ └── index.js.map │ │ │ │ │ │ └── package.json │ │ │ │ ├── before-after-hook │ │ │ │ │ ├── LICENSE │ │ │ │ │ ├── README.md │ │ │ │ │ ├── index.d.ts │ │ │ │ │ ├── index.js │ │ │ │ │ ├── lib │ │ │ │ │ │ ├── add.js │ │ │ │ │ │ ├── register.js │ │ │ │ │ │ └── remove.js │ │ │ │ │ └── package.json │ │ │ │ ├── deprecation │ │ │ │ │ ├── LICENSE │ │ │ │ │ ├── README.md │ │ │ │ │ ├── dist-node │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── dist-src │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── dist-types │ │ │ │ │ │ └── index.d.ts │ │ │ │ │ ├── dist-web │ │ │ │ │ │ └── index.js │ │ │ │ │ └── package.json │ │ │ │ ├── is-plain-object │ │ │ │ │ ├── LICENSE │ │ │ │ │ ├── README.md │ │ │ │ │ ├── dist │ │ │ │ │ │ ├── is-plain-object.js │ │ │ │ │ │ └── is-plain-object.mjs │ │ │ │ │ ├── is-plain-object.d.ts │ │ │ │ │ └── package.json │ │ │ │ ├── node-fetch │ │ │ │ │ ├── LICENSE.md │ │ │ │ │ ├── README.md │ │ │ │ │ ├── browser.js │ │ │ │ │ ├── lib │ │ │ │ │ │ ├── index.es.js │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ └── index.mjs │ │ │ │ │ └── package.json │ │ │ │ ├── once │ │ │ │ │ ├── LICENSE │ │ │ │ │ ├── README.md │ │ │ │ │ ├── once.js │ │ │ │ │ └── package.json │ │ │ │ ├── tr46 │ │ │ │ │ ├── .npmignore │ │ │ │ │ ├── index.js │ │ │ │ │ ├── lib │ │ │ │ │ │ ├── .gitkeep │ │ │ │ │ │ └── mappingTable.json │ │ │ │ │ └── package.json │ │ │ │ ├── tunnel │ │ │ │ │ ├── .travis.yml │ │ │ │ │ ├── CHANGELOG.md │ │ │ │ │ ├── LICENSE │ │ │ │ │ ├── README.md │ │ │ │ │ ├── index.js │ │ │ │ │ ├── lib │ │ │ │ │ │ └── tunnel.js │ │ │ │ │ └── package.json │ │ │ │ ├── universal-user-agent │ │ │ │ │ ├── LICENSE.md │ │ │ │ │ ├── README.md │ │ │ │ │ ├── dist-node │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ └── index.js.map │ │ │ │ │ ├── dist-src │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── dist-types │ │ │ │ │ │ └── index.d.ts │ │ │ │ │ ├── dist-web │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ └── index.js.map │ │ │ │ │ └── package.json │ │ │ │ ├── uuid │ │ │ │ │ ├── CHANGELOG.md │ │ │ │ │ ├── CONTRIBUTING.md │ │ │ │ │ ├── LICENSE.md │ │ │ │ │ ├── README.md │ │ │ │ │ ├── dist │ │ │ │ │ │ ├── bin │ │ │ │ │ │ │ └── uuid │ │ │ │ │ │ ├── esm-browser │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ ├── md5.js │ │ │ │ │ │ │ ├── nil.js │ │ │ │ │ │ │ ├── parse.js │ │ │ │ │ │ │ ├── regex.js │ │ │ │ │ │ │ ├── rng.js │ │ │ │ │ │ │ ├── sha1.js │ │ │ │ │ │ │ ├── stringify.js │ │ │ │ │ │ │ ├── v1.js │ │ │ │ │ │ │ ├── v3.js │ │ │ │ │ │ │ ├── v35.js │ │ │ │ │ │ │ ├── v4.js │ │ │ │ │ │ │ ├── v5.js │ │ │ │ │ │ │ ├── validate.js │ │ │ │ │ │ │ └── version.js │ │ │ │ │ │ ├── esm-node │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ ├── md5.js │ │ │ │ │ │ │ ├── nil.js │ │ │ │ │ │ │ ├── parse.js │ │ │ │ │ │ │ ├── regex.js │ │ │ │ │ │ │ ├── rng.js │ │ │ │ │ │ │ ├── sha1.js │ │ │ │ │ │ │ ├── stringify.js │ │ │ │ │ │ │ ├── v1.js │ │ │ │ │ │ │ ├── v3.js │ │ │ │ │ │ │ ├── v35.js │ │ │ │ │ │ │ ├── v4.js │ │ │ │ │ │ │ ├── v5.js │ │ │ │ │ │ │ ├── validate.js │ │ │ │ │ │ │ └── version.js │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── md5-browser.js │ │ │ │ │ │ ├── md5.js │ │ │ │ │ │ ├── nil.js │ │ │ │ │ │ ├── parse.js │ │ │ │ │ │ ├── regex.js │ │ │ │ │ │ ├── rng-browser.js │ │ │ │ │ │ ├── rng.js │ │ │ │ │ │ ├── sha1-browser.js │ │ │ │ │ │ ├── sha1.js │ │ │ │ │ │ ├── stringify.js │ │ │ │ │ │ ├── umd │ │ │ │ │ │ │ ├── uuid.min.js │ │ │ │ │ │ │ ├── uuidNIL.min.js │ │ │ │ │ │ │ ├── uuidParse.min.js │ │ │ │ │ │ │ ├── uuidStringify.min.js │ │ │ │ │ │ │ ├── uuidValidate.min.js │ │ │ │ │ │ │ ├── uuidVersion.min.js │ │ │ │ │ │ │ ├── uuidv1.min.js │ │ │ │ │ │ │ ├── uuidv3.min.js │ │ │ │ │ │ │ ├── uuidv4.min.js │ │ │ │ │ │ │ └── uuidv5.min.js │ │ │ │ │ │ ├── uuid-bin.js │ │ │ │ │ │ ├── v1.js │ │ │ │ │ │ ├── v3.js │ │ │ │ │ │ ├── v35.js │ │ │ │ │ │ ├── v4.js │ │ │ │ │ │ ├── v5.js │ │ │ │ │ │ ├── validate.js │ │ │ │ │ │ └── version.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── wrapper.mjs │ │ │ │ ├── webidl-conversions │ │ │ │ │ ├── LICENSE.md │ │ │ │ │ ├── README.md │ │ │ │ │ ├── lib │ │ │ │ │ │ └── index.js │ │ │ │ │ └── package.json │ │ │ │ ├── whatwg-url │ │ │ │ │ ├── LICENSE.txt │ │ │ │ │ ├── README.md │ │ │ │ │ ├── lib │ │ │ │ │ │ ├── URL-impl.js │ │ │ │ │ │ ├── URL.js │ │ │ │ │ │ ├── public-api.js │ │ │ │ │ │ ├── url-state-machine.js │ │ │ │ │ │ └── utils.js │ │ │ │ │ └── package.json │ │ │ │ └── wrappy │ │ │ │ │ ├── LICENSE │ │ │ │ │ ├── README.md │ │ │ │ │ ├── package.json │ │ │ │ │ └── wrappy.js │ │ │ │ ├── package-lock.json │ │ │ │ └── package.json │ │ └── workflows │ │ │ └── deploy.yml │ │ ├── .gitignore │ │ ├── index.html │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── public │ │ └── vite.svg │ │ ├── src │ │ ├── App.jsx │ │ ├── assets │ │ │ └── images │ │ │ │ └── logo.png │ │ ├── components │ │ │ ├── HelpArea.css │ │ │ ├── HelpArea.jsx │ │ │ ├── HelpBox.css │ │ │ ├── HelpBox.jsx │ │ │ ├── MainContent.jsx │ │ │ └── MainContent.test.jsx │ │ ├── index.css │ │ ├── main.jsx │ │ └── test │ │ │ └── setup.js │ │ ├── test.json │ │ └── vite.config.js ├── 09 Security │ ├── 01 Starting Project │ │ ├── .github │ │ │ └── workflows │ │ │ │ ├── label-issues-real.yml │ │ │ │ └── script-injection.yml │ │ ├── .gitignore │ │ └── README.md │ └── 02 Finished Project │ │ ├── .github │ │ └── workflows │ │ │ ├── label-issues-real.yml │ │ │ └── script-injection.yml │ │ ├── .gitignore │ │ └── README.md └── ZZ Git & GitHub Refresher │ ├── 01 Starting Project │ └── index.html │ ├── 02 Updated Project │ └── index.html │ ├── 03 Extra Files │ ├── index.html │ ├── logo.png │ └── styles.css │ ├── 04 Updated Files │ ├── index.html │ ├── logo.png │ └── styles.css │ └── 05 Finished │ ├── .gitignore │ ├── README.md │ ├── index.html │ ├── logo.png │ └── styles.css └── Slides └── github-actions.pdf /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store -------------------------------------------------------------------------------- /Code/02 Basics/01 First Workflow/.github/workflows/first-action.yml: -------------------------------------------------------------------------------- 1 | name: First Workflow 2 | on: workflow_dispatch 3 | jobs: 4 | first-job: 5 | runs-on: ubuntu-latest 6 | steps: 7 | - name: Print greeting 8 | run: echo "Hello World!" 9 | - name: Print goodbye 10 | run: echo "Done - bye!" 11 | -------------------------------------------------------------------------------- /Code/02 Basics/01 First Workflow/README.md: -------------------------------------------------------------------------------- 1 | # Getting Started with GitHub Actions 2 | 3 | This repository will be used to get started with GitHub Actions! -------------------------------------------------------------------------------- /Code/02 Basics/02 Starting Project/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /Code/02 Basics/02 Starting Project/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite + React 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Code/02 Basics/02 Starting Project/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "02-basic-example", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "vite build", 9 | "preview": "vite preview", 10 | "test": "vitest run" 11 | }, 12 | "dependencies": { 13 | "react": "^18.2.0", 14 | "react-dom": "^18.2.0" 15 | }, 16 | "devDependencies": { 17 | "@testing-library/jest-dom": "^5.16.5", 18 | "@testing-library/react": "^13.3.0", 19 | "@testing-library/user-event": "^14.4.3", 20 | "@types/react": "^18.0.17", 21 | "@types/react-dom": "^18.0.6", 22 | "@vitejs/plugin-react": "^2.0.1", 23 | "jsdom": "^20.0.0", 24 | "vite": "^3.0.7", 25 | "vitest": "^0.22.1" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Code/02 Basics/02 Starting Project/src/App.jsx: -------------------------------------------------------------------------------- 1 | import MainContent from './components/MainContent'; 2 | import logo from './assets/images/logo.png'; 3 | 4 | function App() { 5 | return ( 6 | <> 7 |
8 |
9 | 10 |
11 |

Learn & Master GitHub Actions

12 |
13 | 14 | 15 | ); 16 | } 17 | 18 | export default App; 19 | -------------------------------------------------------------------------------- /Code/02 Basics/02 Starting Project/src/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/academind/github-actions-course-resources/40301953af898062979c4a419ba470f5fa2a75f3/Code/02 Basics/02 Starting Project/src/assets/images/logo.png -------------------------------------------------------------------------------- /Code/02 Basics/02 Starting Project/src/components/HelpArea.css: -------------------------------------------------------------------------------- 1 | #help-area { 2 | margin: auto; 3 | display: flex; 4 | } 5 | -------------------------------------------------------------------------------- /Code/02 Basics/02 Starting Project/src/components/HelpBox.css: -------------------------------------------------------------------------------- 1 | .help-box { 2 | padding: 1rem; 3 | border-radius: 4px; 4 | margin: 1; 5 | flex: 1; 6 | } 7 | 8 | .help-box h2 { 9 | color: #97a2a2; 10 | font-size: 1.05rem; 11 | } -------------------------------------------------------------------------------- /Code/02 Basics/02 Starting Project/src/components/HelpBox.jsx: -------------------------------------------------------------------------------- 1 | import './HelpBox.css'; 2 | 3 | function HelpBox({ title, text }) { 4 | return ( 5 |
6 |

{title}

7 |

{text}

8 |
9 | ); 10 | } 11 | 12 | export default HelpBox; 13 | -------------------------------------------------------------------------------- /Code/02 Basics/02 Starting Project/src/components/MainContent.jsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react'; 2 | 3 | import HelpArea from './HelpArea'; 4 | 5 | function MainContent() { 6 | const [helpVisible, setHelpVisible] = useState(false); 7 | 8 | function toggleHelp() { 9 | setHelpVisible((isVisible) => !isVisible); 10 | } 11 | 12 | return ( 13 |
14 | 15 | {helpVisible && } 16 |
17 | ); 18 | } 19 | 20 | export default MainContent; 21 | -------------------------------------------------------------------------------- /Code/02 Basics/02 Starting Project/src/components/MainContent.test.jsx: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom'; 2 | import { render, screen } from '@testing-library/react'; 3 | import userEvent from '@testing-library/user-event'; 4 | 5 | import MainContent from './MainContent'; 6 | 7 | describe('MainContent', () => { 8 | it('should render a button', () => { 9 | render(); 10 | 11 | expect(screen.getByRole('button')).toBeInTheDocument(); 12 | }); 13 | 14 | it('should show the help area after clicking the button', async () => { 15 | render(); 16 | 17 | const button = screen.getByRole('button'); 18 | await userEvent.click(button); 19 | expect(screen.getByTestId('help-area')).toBeInTheDocument(); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /Code/02 Basics/02 Starting Project/src/main.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom/client'; 3 | 4 | import App from './App'; 5 | import './index.css'; 6 | 7 | ReactDOM.createRoot(document.getElementById('root')).render( 8 | 9 | 10 | 11 | ); 12 | -------------------------------------------------------------------------------- /Code/02 Basics/02 Starting Project/src/test/setup.js: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom'; 2 | -------------------------------------------------------------------------------- /Code/02 Basics/02 Starting Project/vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import react from '@vitejs/plugin-react'; 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [react()], 7 | test: { 8 | globals: true, 9 | environment: 'jsdom', 10 | setupFiles: './src/test/setup.js', 11 | }, 12 | }); 13 | -------------------------------------------------------------------------------- /Code/02 Basics/03 Finished Project/.github/workflows/output.yml: -------------------------------------------------------------------------------- 1 | name: Output information 2 | on: workflow_dispatch 3 | jobs: 4 | info: 5 | runs-on: ubuntu-latest 6 | steps: 7 | - name: Output GitHub context 8 | run: echo "${{ toJSON(github) }}" -------------------------------------------------------------------------------- /Code/02 Basics/03 Finished Project/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /Code/02 Basics/03 Finished Project/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite + React 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Code/02 Basics/03 Finished Project/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "02-basic-example", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "vite build", 9 | "preview": "vite preview", 10 | "test": "vitest run" 11 | }, 12 | "dependencies": { 13 | "react": "^18.2.0", 14 | "react-dom": "^18.2.0" 15 | }, 16 | "devDependencies": { 17 | "@testing-library/jest-dom": "^5.16.5", 18 | "@testing-library/react": "^13.3.0", 19 | "@testing-library/user-event": "^14.4.3", 20 | "@types/react": "^18.0.17", 21 | "@types/react-dom": "^18.0.6", 22 | "@vitejs/plugin-react": "^2.0.1", 23 | "jsdom": "^20.0.0", 24 | "vite": "^3.0.7", 25 | "vitest": "^0.22.1" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Code/02 Basics/03 Finished Project/src/App.jsx: -------------------------------------------------------------------------------- 1 | import MainContent from './components/MainContent'; 2 | import logo from './assets/images/logo.png'; 3 | 4 | function App() { 5 | return ( 6 | <> 7 |
8 |
9 | 10 |
11 |

Learn & Master GitHub Actions

12 |
13 | 14 | 15 | ); 16 | } 17 | 18 | export default App; 19 | -------------------------------------------------------------------------------- /Code/02 Basics/03 Finished Project/src/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/academind/github-actions-course-resources/40301953af898062979c4a419ba470f5fa2a75f3/Code/02 Basics/03 Finished Project/src/assets/images/logo.png -------------------------------------------------------------------------------- /Code/02 Basics/03 Finished Project/src/components/HelpArea.css: -------------------------------------------------------------------------------- 1 | #help-area { 2 | margin: auto; 3 | display: flex; 4 | } 5 | -------------------------------------------------------------------------------- /Code/02 Basics/03 Finished Project/src/components/HelpBox.css: -------------------------------------------------------------------------------- 1 | .help-box { 2 | padding: 1rem; 3 | border-radius: 4px; 4 | margin: 1; 5 | flex: 1; 6 | } 7 | 8 | .help-box h2 { 9 | color: #97a2a2; 10 | font-size: 1.05rem; 11 | } -------------------------------------------------------------------------------- /Code/02 Basics/03 Finished Project/src/components/HelpBox.jsx: -------------------------------------------------------------------------------- 1 | import './HelpBox.css'; 2 | 3 | function HelpBox({ title, text }) { 4 | return ( 5 |
6 |

{title}

7 |

{text}

8 |
9 | ); 10 | } 11 | 12 | export default HelpBox; 13 | -------------------------------------------------------------------------------- /Code/02 Basics/03 Finished Project/src/components/MainContent.jsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react'; 2 | 3 | import HelpArea from './HelpArea'; 4 | 5 | function MainContent() { 6 | const [helpVisible, setHelpVisible] = useState(false); 7 | 8 | function toggleHelp() { 9 | setHelpVisible((isVisible) => !isVisible); 10 | } 11 | 12 | return ( 13 |
14 | 15 | {helpVisible && } 16 |
17 | ); 18 | } 19 | 20 | export default MainContent; 21 | -------------------------------------------------------------------------------- /Code/02 Basics/03 Finished Project/src/components/MainContent.test.jsx: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom'; 2 | import { render, screen } from '@testing-library/react'; 3 | import userEvent from '@testing-library/user-event'; 4 | 5 | import MainContent from './MainContent'; 6 | 7 | describe('MainContent', () => { 8 | it('should render a button', () => { 9 | render(); 10 | 11 | expect(screen.getByRole('button')).toBeInTheDocument(); 12 | }); 13 | 14 | it('should show the help area after clicking the button', async () => { 15 | render(); 16 | 17 | const button = screen.getByRole('button'); 18 | await userEvent.click(button); 19 | expect(screen.getByTestId('help-area')).toBeInTheDocument(); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /Code/02 Basics/03 Finished Project/src/main.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom/client'; 3 | 4 | import App from './App'; 5 | import './index.css'; 6 | 7 | ReactDOM.createRoot(document.getElementById('root')).render( 8 | 9 | 10 | 11 | ); 12 | -------------------------------------------------------------------------------- /Code/02 Basics/03 Finished Project/src/test/setup.js: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom'; 2 | -------------------------------------------------------------------------------- /Code/02 Basics/03 Finished Project/vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import react from '@vitejs/plugin-react'; 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [react()], 7 | test: { 8 | globals: true, 9 | environment: 'jsdom', 10 | setupFiles: './src/test/setup.js', 11 | }, 12 | }); 13 | -------------------------------------------------------------------------------- /Code/02 Basics/04 Practice Project (Start)/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "env": { 4 | "node": true, 5 | "browser": true 6 | }, 7 | "parserOptions": { 8 | "ecmaFeatures": { 9 | "jsx": true 10 | }, 11 | "ecmaVersion": "latest", 12 | "sourceType": "module" 13 | }, 14 | "extends": ["plugin:react/recommended", "plugin:react/jsx-runtime"], 15 | "rules": { 16 | "react/react-in-jsx-scope": "off", 17 | "semi": [2, "always"] 18 | }, 19 | "settings": { 20 | "react": { 21 | "version": "detect" 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Code/02 Basics/04 Practice Project (Start)/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /Code/02 Basics/04 Practice Project (Start)/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite + React 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Code/02 Basics/04 Practice Project (Start)/src/App.jsx: -------------------------------------------------------------------------------- 1 | import MainContent from './components/MainContent'; 2 | import logo from './assets/images/logo.png'; 3 | 4 | function App() { 5 | return ( 6 | <> 7 |
8 |
9 | 10 |
11 |

Learn & Master GitHub Actions

12 |
13 | 14 | 15 | ); 16 | } 17 | 18 | export default App; 19 | -------------------------------------------------------------------------------- /Code/02 Basics/04 Practice Project (Start)/src/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/academind/github-actions-course-resources/40301953af898062979c4a419ba470f5fa2a75f3/Code/02 Basics/04 Practice Project (Start)/src/assets/images/logo.png -------------------------------------------------------------------------------- /Code/02 Basics/04 Practice Project (Start)/src/components/HelpArea.css: -------------------------------------------------------------------------------- 1 | #help-area { 2 | margin: auto; 3 | display: flex; 4 | } 5 | -------------------------------------------------------------------------------- /Code/02 Basics/04 Practice Project (Start)/src/components/HelpBox.css: -------------------------------------------------------------------------------- 1 | .help-box { 2 | padding: 1rem; 3 | border-radius: 4px; 4 | margin: 1; 5 | flex: 1; 6 | } 7 | 8 | .help-box h2 { 9 | color: #97a2a2; 10 | font-size: 1.05rem; 11 | } -------------------------------------------------------------------------------- /Code/02 Basics/04 Practice Project (Start)/src/components/HelpBox.jsx: -------------------------------------------------------------------------------- 1 | import { string } from 'prop-types'; 2 | 3 | import './HelpBox.css'; 4 | 5 | function HelpBox({ title, text }) { 6 | return ( 7 |
8 |

{title}

9 |

{text}

10 |
11 | ); 12 | } 13 | 14 | HelpBox.propTypes = { 15 | title: string, 16 | text: string, 17 | }; 18 | 19 | export default HelpBox; 20 | -------------------------------------------------------------------------------- /Code/02 Basics/04 Practice Project (Start)/src/components/MainContent.jsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react'; 2 | 3 | import HelpArea from './HelpArea'; 4 | 5 | function MainContent() { 6 | const [helpVisible, setHelpVisible] = useState(false); 7 | 8 | function toggleHelp() { 9 | setHelpVisible((isVisible) => !isVisible); 10 | } 11 | 12 | return ( 13 |
14 | 15 | {helpVisible && } 16 |
17 | ); 18 | } 19 | 20 | export default MainContent; 21 | -------------------------------------------------------------------------------- /Code/02 Basics/04 Practice Project (Start)/src/components/MainContent.test.jsx: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom'; 2 | import { render, screen } from '@testing-library/react'; 3 | import userEvent from '@testing-library/user-event'; 4 | 5 | import MainContent from './MainContent'; 6 | 7 | describe('MainContent', () => { 8 | it('should render a button', () => { 9 | render(); 10 | 11 | expect(screen.getByRole('button')).toBeInTheDocument(); 12 | }); 13 | 14 | it('should show the help area after clicking the button', async () => { 15 | render(); 16 | 17 | const button = screen.getByRole('button'); 18 | await userEvent.click(button); 19 | expect(screen.getByTestId('help-area')).toBeInTheDocument(); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /Code/02 Basics/04 Practice Project (Start)/src/main.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom/client'; 3 | 4 | import App from './App'; 5 | import './index.css'; 6 | 7 | ReactDOM.createRoot(document.getElementById('root')).render( 8 | 9 | 10 | 11 | ); 12 | -------------------------------------------------------------------------------- /Code/02 Basics/04 Practice Project (Start)/src/test/setup.js: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom'; 2 | -------------------------------------------------------------------------------- /Code/02 Basics/04 Practice Project (Start)/vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import react from '@vitejs/plugin-react'; 3 | import eslint from 'vite-plugin-eslint'; 4 | 5 | // https://vitejs.dev/config/ 6 | export default defineConfig({ 7 | plugins: [react(), eslint()], 8 | test: { 9 | globals: true, 10 | environment: 'jsdom', 11 | setupFiles: './src/test/setup.js', 12 | }, 13 | }); 14 | -------------------------------------------------------------------------------- /Code/02 Basics/05 Practice Project (Finished)/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "env": { 4 | "node": true, 5 | "browser": true 6 | }, 7 | "parserOptions": { 8 | "ecmaFeatures": { 9 | "jsx": true 10 | }, 11 | "ecmaVersion": "latest", 12 | "sourceType": "module" 13 | }, 14 | "extends": ["plugin:react/recommended", "plugin:react/jsx-runtime"], 15 | "rules": { 16 | "react/react-in-jsx-scope": "off", 17 | "semi": [2, "always"] 18 | }, 19 | "settings": { 20 | "react": { 21 | "version": "detect" 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Code/02 Basics/05 Practice Project (Finished)/.github/workflows/deployment1.yaml: -------------------------------------------------------------------------------- 1 | name: Deployment Exercise 1 2 | on: push 3 | jobs: 4 | deploy: 5 | runs-on: ubuntu-latest 6 | steps: 7 | - name: Get code 8 | uses: actions/checkout@v3 9 | - name: Install dependencies 10 | run: npm ci 11 | - name: Lint 12 | run: npm run lint 13 | - name: Test code 14 | run: npm run test 15 | - name: Build code 16 | run: npm run build 17 | - name: Deploy code 18 | run: echo "Deploying..." -------------------------------------------------------------------------------- /Code/02 Basics/05 Practice Project (Finished)/.github/workflows/issues.yml: -------------------------------------------------------------------------------- 1 | name: Handle issues 2 | on: issues 3 | jobs: 4 | output-info: 5 | runs-on: ubuntu-latest 6 | steps: 7 | - name: Output event details 8 | run: echo "${{ toJSON(github.event) }}" -------------------------------------------------------------------------------- /Code/02 Basics/05 Practice Project (Finished)/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /Code/02 Basics/05 Practice Project (Finished)/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite + React 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Code/02 Basics/05 Practice Project (Finished)/src/App.jsx: -------------------------------------------------------------------------------- 1 | import MainContent from './components/MainContent'; 2 | import logo from './assets/images/logo.png'; 3 | 4 | function App() { 5 | return ( 6 | <> 7 |
8 |
9 | 10 |
11 |

Learn & Master GitHub Actions

12 |
13 | 14 | 15 | ); 16 | } 17 | 18 | export default App; 19 | -------------------------------------------------------------------------------- /Code/02 Basics/05 Practice Project (Finished)/src/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/academind/github-actions-course-resources/40301953af898062979c4a419ba470f5fa2a75f3/Code/02 Basics/05 Practice Project (Finished)/src/assets/images/logo.png -------------------------------------------------------------------------------- /Code/02 Basics/05 Practice Project (Finished)/src/components/HelpArea.css: -------------------------------------------------------------------------------- 1 | #help-area { 2 | margin: auto; 3 | display: flex; 4 | } 5 | -------------------------------------------------------------------------------- /Code/02 Basics/05 Practice Project (Finished)/src/components/HelpBox.css: -------------------------------------------------------------------------------- 1 | .help-box { 2 | padding: 1rem; 3 | border-radius: 4px; 4 | margin: 1; 5 | flex: 1; 6 | } 7 | 8 | .help-box h2 { 9 | color: #97a2a2; 10 | font-size: 1.05rem; 11 | } -------------------------------------------------------------------------------- /Code/02 Basics/05 Practice Project (Finished)/src/components/HelpBox.jsx: -------------------------------------------------------------------------------- 1 | import { string } from 'prop-types'; 2 | 3 | import './HelpBox.css'; 4 | 5 | function HelpBox({ title, text }) { 6 | return ( 7 |
8 |

{title}

9 |

{text}

10 |
11 | ); 12 | } 13 | 14 | HelpBox.propTypes = { 15 | title: string, 16 | text: string, 17 | }; 18 | 19 | export default HelpBox; 20 | -------------------------------------------------------------------------------- /Code/02 Basics/05 Practice Project (Finished)/src/components/MainContent.jsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react'; 2 | 3 | import HelpArea from './HelpArea'; 4 | 5 | function MainContent() { 6 | const [helpVisible, setHelpVisible] = useState(false); 7 | 8 | function toggleHelp() { 9 | setHelpVisible((isVisible) => !isVisible); 10 | } 11 | 12 | return ( 13 |
14 | 15 | {helpVisible && } 16 |
17 | ); 18 | } 19 | 20 | export default MainContent; 21 | -------------------------------------------------------------------------------- /Code/02 Basics/05 Practice Project (Finished)/src/components/MainContent.test.jsx: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom'; 2 | import { render, screen } from '@testing-library/react'; 3 | import userEvent from '@testing-library/user-event'; 4 | 5 | import MainContent from './MainContent'; 6 | 7 | describe('MainContent', () => { 8 | it('should render a button', () => { 9 | render(); 10 | 11 | expect(screen.getByRole('button')).toBeInTheDocument(); 12 | }); 13 | 14 | it('should show the help area after clicking the button', async () => { 15 | render(); 16 | 17 | const button = screen.getByRole('button'); 18 | await userEvent.click(button); 19 | expect(screen.getByTestId('help-area')).toBeInTheDocument(); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /Code/02 Basics/05 Practice Project (Finished)/src/main.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom/client'; 3 | 4 | import App from './App'; 5 | import './index.css'; 6 | 7 | ReactDOM.createRoot(document.getElementById('root')).render( 8 | 9 | 10 | 11 | ); 12 | -------------------------------------------------------------------------------- /Code/02 Basics/05 Practice Project (Finished)/src/test/setup.js: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom'; 2 | -------------------------------------------------------------------------------- /Code/02 Basics/05 Practice Project (Finished)/vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import react from '@vitejs/plugin-react'; 3 | import eslint from 'vite-plugin-eslint'; 4 | 5 | // https://vitejs.dev/config/ 6 | export default defineConfig({ 7 | plugins: [react(), eslint()], 8 | test: { 9 | globals: true, 10 | environment: 'jsdom', 11 | setupFiles: './src/test/setup.js', 12 | }, 13 | }); 14 | -------------------------------------------------------------------------------- /Code/03 Events/01 Starting Project/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "env": { 4 | "node": true, 5 | "browser": true 6 | }, 7 | "parserOptions": { 8 | "ecmaFeatures": { 9 | "jsx": true 10 | }, 11 | "ecmaVersion": "latest", 12 | "sourceType": "module" 13 | }, 14 | "extends": ["plugin:react/recommended", "plugin:react/jsx-runtime"], 15 | "rules": { 16 | "react/react-in-jsx-scope": "off", 17 | "semi": [2, "always"] 18 | }, 19 | "settings": { 20 | "react": { 21 | "version": "detect" 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Code/03 Events/01 Starting Project/.github/workflows/demo1.yml: -------------------------------------------------------------------------------- 1 | name: Events Demo 1 2 | on: ... 3 | jobs: 4 | deploy: 5 | runs-on: ubuntu-latest 6 | steps: 7 | - name: Output event data 8 | run: echo "${{ toJSON(github.event) }}" 9 | - name: Get code 10 | uses: actions/checkout@v3 11 | - name: Install dependencies 12 | run: npm ci 13 | - name: Test code 14 | run: npm run test 15 | - name: Build code 16 | run: npm run build 17 | - name: Deploy project 18 | run: echo "Deploying..." -------------------------------------------------------------------------------- /Code/03 Events/01 Starting Project/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /Code/03 Events/01 Starting Project/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite + React 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Code/03 Events/01 Starting Project/src/App.jsx: -------------------------------------------------------------------------------- 1 | import MainContent from './components/MainContent'; 2 | import logo from './assets/images/logo.png'; 3 | 4 | function App() { 5 | return ( 6 | <> 7 |
8 |
9 | 10 |
11 |

Learn & Master GitHub Actions

12 |
13 | 14 | 15 | ); 16 | } 17 | 18 | export default App; 19 | -------------------------------------------------------------------------------- /Code/03 Events/01 Starting Project/src/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/academind/github-actions-course-resources/40301953af898062979c4a419ba470f5fa2a75f3/Code/03 Events/01 Starting Project/src/assets/images/logo.png -------------------------------------------------------------------------------- /Code/03 Events/01 Starting Project/src/components/HelpArea.css: -------------------------------------------------------------------------------- 1 | #help-area { 2 | margin: auto; 3 | display: flex; 4 | } 5 | -------------------------------------------------------------------------------- /Code/03 Events/01 Starting Project/src/components/HelpBox.css: -------------------------------------------------------------------------------- 1 | .help-box { 2 | padding: 1rem; 3 | border-radius: 4px; 4 | margin: 1; 5 | flex: 1; 6 | } 7 | 8 | .help-box h2 { 9 | color: #97a2a2; 10 | font-size: 1.05rem; 11 | } -------------------------------------------------------------------------------- /Code/03 Events/01 Starting Project/src/components/HelpBox.jsx: -------------------------------------------------------------------------------- 1 | import { string } from 'prop-types'; 2 | 3 | import './HelpBox.css'; 4 | 5 | function HelpBox({ title, text }) { 6 | return ( 7 |
8 |

{title}

9 |

{text}

10 |
11 | ); 12 | } 13 | 14 | HelpBox.propTypes = { 15 | title: string, 16 | text: string, 17 | }; 18 | 19 | export default HelpBox; 20 | -------------------------------------------------------------------------------- /Code/03 Events/01 Starting Project/src/components/MainContent.jsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react'; 2 | 3 | import HelpArea from './HelpArea'; 4 | 5 | function MainContent() { 6 | const [helpVisible, setHelpVisible] = useState(false); 7 | 8 | function toggleHelp() { 9 | setHelpVisible((isVisible) => !isVisible); 10 | } 11 | 12 | return ( 13 |
14 | 15 | {helpVisible && } 16 |
17 | ); 18 | } 19 | 20 | export default MainContent; 21 | -------------------------------------------------------------------------------- /Code/03 Events/01 Starting Project/src/components/MainContent.test.jsx: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom'; 2 | import { render, screen } from '@testing-library/react'; 3 | import userEvent from '@testing-library/user-event'; 4 | 5 | import MainContent from './MainContent'; 6 | 7 | describe('MainContent', () => { 8 | it('should render a button', () => { 9 | render(); 10 | 11 | expect(screen.getByRole('button')).toBeInTheDocument(); 12 | }); 13 | 14 | it('should show the help area after clicking the button', async () => { 15 | render(); 16 | 17 | const button = screen.getByRole('button'); 18 | await userEvent.click(button); 19 | expect(screen.getByTestId('help-area')).toBeInTheDocument(); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /Code/03 Events/01 Starting Project/src/main.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom/client'; 3 | 4 | import App from './App'; 5 | import './index.css'; 6 | 7 | ReactDOM.createRoot(document.getElementById('root')).render( 8 | 9 | 10 | 11 | ); 12 | -------------------------------------------------------------------------------- /Code/03 Events/01 Starting Project/src/test/setup.js: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom'; 2 | -------------------------------------------------------------------------------- /Code/03 Events/01 Starting Project/vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import react from '@vitejs/plugin-react'; 3 | import eslint from 'vite-plugin-eslint'; 4 | 5 | // https://vitejs.dev/config/ 6 | export default defineConfig({ 7 | plugins: [react(), eslint()], 8 | test: { 9 | globals: true, 10 | environment: 'jsdom', 11 | setupFiles: './src/test/setup.js', 12 | }, 13 | }); 14 | -------------------------------------------------------------------------------- /Code/03 Events/02 Finished Project/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "env": { 4 | "node": true, 5 | "browser": true 6 | }, 7 | "parserOptions": { 8 | "ecmaFeatures": { 9 | "jsx": true 10 | }, 11 | "ecmaVersion": "latest", 12 | "sourceType": "module" 13 | }, 14 | "extends": ["plugin:react/recommended", "plugin:react/jsx-runtime"], 15 | "rules": { 16 | "react/react-in-jsx-scope": "off", 17 | "semi": [2, "always"] 18 | }, 19 | "settings": { 20 | "react": { 21 | "version": "detect" 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Code/03 Events/02 Finished Project/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /Code/03 Events/02 Finished Project/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite + React 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Code/03 Events/02 Finished Project/src/App.jsx: -------------------------------------------------------------------------------- 1 | import MainContent from './components/MainContent'; 2 | import logo from './assets/images/logo.png'; 3 | 4 | function App() { 5 | return ( 6 | <> 7 |
8 |
9 | 10 |
11 |

Learn & Master GitHub Actions

12 |
13 | 14 | 15 | ); 16 | } 17 | 18 | export default App; 19 | -------------------------------------------------------------------------------- /Code/03 Events/02 Finished Project/src/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/academind/github-actions-course-resources/40301953af898062979c4a419ba470f5fa2a75f3/Code/03 Events/02 Finished Project/src/assets/images/logo.png -------------------------------------------------------------------------------- /Code/03 Events/02 Finished Project/src/components/HelpArea.css: -------------------------------------------------------------------------------- 1 | #help-area { 2 | margin: auto; 3 | display: flex; 4 | } 5 | -------------------------------------------------------------------------------- /Code/03 Events/02 Finished Project/src/components/HelpBox.css: -------------------------------------------------------------------------------- 1 | .help-box { 2 | padding: 1rem; 3 | border-radius: 4px; 4 | margin: 1; 5 | flex: 1; 6 | } 7 | 8 | .help-box h2 { 9 | color: #97a2a2; 10 | font-size: 1.05rem; 11 | } -------------------------------------------------------------------------------- /Code/03 Events/02 Finished Project/src/components/HelpBox.jsx: -------------------------------------------------------------------------------- 1 | import { string } from 'prop-types'; 2 | 3 | import './HelpBox.css'; 4 | 5 | function HelpBox({ title, text }) { 6 | return ( 7 |
8 |

{title}

9 |

{text}

10 |
11 | ); 12 | } 13 | 14 | HelpBox.propTypes = { 15 | title: string, 16 | text: string, 17 | }; 18 | 19 | export default HelpBox; 20 | -------------------------------------------------------------------------------- /Code/03 Events/02 Finished Project/src/components/MainContent.jsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react'; 2 | 3 | import HelpArea from './HelpArea'; 4 | 5 | function MainContent() { 6 | const [helpVisible, setHelpVisible] = useState(false); 7 | 8 | function toggleHelp() { 9 | setHelpVisible((isVisible) => !isVisible); 10 | } 11 | 12 | return ( 13 |
14 | 15 | {helpVisible && } 16 |
17 | ); 18 | } 19 | 20 | export default MainContent; 21 | -------------------------------------------------------------------------------- /Code/03 Events/02 Finished Project/src/components/MainContent.test.jsx: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom'; 2 | import { render, screen } from '@testing-library/react'; 3 | import userEvent from '@testing-library/user-event'; 4 | 5 | import MainContent from './MainContent'; 6 | 7 | // My tests! 8 | // Add yet another comment 9 | 10 | describe('MainContent', () => { 11 | it('should render a button', () => { 12 | render(); 13 | 14 | expect(screen.getByRole('button')).toBeInTheDocument(); 15 | }); 16 | 17 | it('should show the help area after clicking the button', async () => { 18 | render(); 19 | 20 | const button = screen.getByRole('button'); 21 | await userEvent.click(button); 22 | expect(screen.getByTestId('help-area')).toBeInTheDocument(); 23 | }); 24 | }); 25 | -------------------------------------------------------------------------------- /Code/03 Events/02 Finished Project/src/main.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom/client'; 3 | 4 | import App from './App'; 5 | import './index.css'; 6 | 7 | ReactDOM.createRoot(document.getElementById('root')).render( 8 | 9 | 10 | 11 | ); 12 | -------------------------------------------------------------------------------- /Code/03 Events/02 Finished Project/src/test/setup.js: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom'; 2 | -------------------------------------------------------------------------------- /Code/03 Events/02 Finished Project/vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import react from '@vitejs/plugin-react'; 3 | import eslint from 'vite-plugin-eslint'; 4 | 5 | // https://vitejs.dev/config/ 6 | export default defineConfig({ 7 | plugins: [react(), eslint()], 8 | test: { 9 | globals: true, 10 | environment: 'jsdom', 11 | setupFiles: './src/test/setup.js', 12 | }, 13 | }); 14 | -------------------------------------------------------------------------------- /Code/04 Artifacts & Outputs/01 Starting Project/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "env": { 4 | "node": true, 5 | "browser": true 6 | }, 7 | "parserOptions": { 8 | "ecmaFeatures": { 9 | "jsx": true 10 | }, 11 | "ecmaVersion": "latest", 12 | "sourceType": "module" 13 | }, 14 | "extends": ["plugin:react/recommended", "plugin:react/jsx-runtime"], 15 | "rules": { 16 | "react/react-in-jsx-scope": "off", 17 | "semi": [2, "always"] 18 | }, 19 | "settings": { 20 | "react": { 21 | "version": "detect" 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Code/04 Artifacts & Outputs/01 Starting Project/.github/workflows/demo.yml: -------------------------------------------------------------------------------- 1 | name: Deploy website 2 | on: 3 | push: 4 | branches: 5 | - main 6 | jobs: 7 | test: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - name: Get code 11 | uses: actions/checkout@v3 12 | - name: Install dependencies 13 | run: npm ci 14 | - name: Lint code 15 | run: npm run lint 16 | - name: Test code 17 | run: npm run test 18 | build: 19 | needs: test 20 | runs-on: ubuntu-latest 21 | steps: 22 | - name: Get code 23 | uses: actions/checkout@v3 24 | - name: Install dependencies 25 | run: npm ci 26 | - name: Build website 27 | run: npm run build 28 | deploy: 29 | needs: build 30 | runs-on: ubuntu-latest 31 | steps: 32 | - name: Deploy 33 | run: echo "Deploying..." 34 | -------------------------------------------------------------------------------- /Code/04 Artifacts & Outputs/01 Starting Project/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /Code/04 Artifacts & Outputs/01 Starting Project/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite + React 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Code/04 Artifacts & Outputs/01 Starting Project/src/App.jsx: -------------------------------------------------------------------------------- 1 | import MainContent from './components/MainContent'; 2 | import logo from './assets/images/logo.png'; 3 | 4 | function App() { 5 | return ( 6 | <> 7 |
8 |
9 | 10 |
11 |

Learn & Master GitHub Actions

12 |
13 | 14 | 15 | ); 16 | } 17 | 18 | export default App; 19 | -------------------------------------------------------------------------------- /Code/04 Artifacts & Outputs/01 Starting Project/src/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/academind/github-actions-course-resources/40301953af898062979c4a419ba470f5fa2a75f3/Code/04 Artifacts & Outputs/01 Starting Project/src/assets/images/logo.png -------------------------------------------------------------------------------- /Code/04 Artifacts & Outputs/01 Starting Project/src/components/HelpArea.css: -------------------------------------------------------------------------------- 1 | #help-area { 2 | margin: auto; 3 | display: flex; 4 | } 5 | -------------------------------------------------------------------------------- /Code/04 Artifacts & Outputs/01 Starting Project/src/components/HelpBox.css: -------------------------------------------------------------------------------- 1 | .help-box { 2 | padding: 1rem; 3 | border-radius: 4px; 4 | margin: 1; 5 | flex: 1; 6 | } 7 | 8 | .help-box h2 { 9 | color: #97a2a2; 10 | font-size: 1.05rem; 11 | } -------------------------------------------------------------------------------- /Code/04 Artifacts & Outputs/01 Starting Project/src/components/HelpBox.jsx: -------------------------------------------------------------------------------- 1 | import { string } from 'prop-types'; 2 | 3 | import './HelpBox.css'; 4 | 5 | function HelpBox({ title, text }) { 6 | return ( 7 |
8 |

{title}

9 |

{text}

10 |
11 | ); 12 | } 13 | 14 | HelpBox.propTypes = { 15 | title: string, 16 | text: string, 17 | }; 18 | 19 | export default HelpBox; 20 | -------------------------------------------------------------------------------- /Code/04 Artifacts & Outputs/01 Starting Project/src/components/MainContent.jsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react'; 2 | 3 | import HelpArea from './HelpArea'; 4 | 5 | function MainContent() { 6 | const [helpVisible, setHelpVisible] = useState(false); 7 | 8 | function toggleHelp() { 9 | setHelpVisible((isVisible) => !isVisible); 10 | } 11 | 12 | return ( 13 |
14 | 15 | {helpVisible && } 16 |
17 | ); 18 | } 19 | 20 | export default MainContent; 21 | -------------------------------------------------------------------------------- /Code/04 Artifacts & Outputs/01 Starting Project/src/components/MainContent.test.jsx: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom'; 2 | import { render, screen } from '@testing-library/react'; 3 | import userEvent from '@testing-library/user-event'; 4 | 5 | import MainContent from './MainContent'; 6 | 7 | // My tests! 8 | // Add yet another comment 9 | 10 | describe('MainContent', () => { 11 | it('should render a button', () => { 12 | render(); 13 | 14 | expect(screen.getByRole('button')).toBeInTheDocument(); 15 | }); 16 | 17 | it('should show the help area after clicking the button', async () => { 18 | render(); 19 | 20 | const button = screen.getByRole('button'); 21 | await userEvent.click(button); 22 | expect(screen.getByTestId('help-area')).toBeInTheDocument(); 23 | }); 24 | }); 25 | -------------------------------------------------------------------------------- /Code/04 Artifacts & Outputs/01 Starting Project/src/main.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom/client'; 3 | 4 | import App from './App'; 5 | import './index.css'; 6 | 7 | ReactDOM.createRoot(document.getElementById('root')).render( 8 | 9 | 10 | 11 | ); 12 | -------------------------------------------------------------------------------- /Code/04 Artifacts & Outputs/01 Starting Project/src/test/setup.js: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom'; 2 | -------------------------------------------------------------------------------- /Code/04 Artifacts & Outputs/01 Starting Project/vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import react from '@vitejs/plugin-react'; 3 | import eslint from 'vite-plugin-eslint'; 4 | 5 | // https://vitejs.dev/config/ 6 | export default defineConfig({ 7 | plugins: [react(), eslint()], 8 | test: { 9 | globals: true, 10 | environment: 'jsdom', 11 | setupFiles: './src/test/setup.js', 12 | }, 13 | }); 14 | -------------------------------------------------------------------------------- /Code/04 Artifacts & Outputs/02 Extra Files/command.txt: -------------------------------------------------------------------------------- 1 | find dist/assets/*.js -type f -execdir echo '{}' ';' -------------------------------------------------------------------------------- /Code/04 Artifacts & Outputs/03 Finished Project/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "env": { 4 | "node": true, 5 | "browser": true 6 | }, 7 | "parserOptions": { 8 | "ecmaFeatures": { 9 | "jsx": true 10 | }, 11 | "ecmaVersion": "latest", 12 | "sourceType": "module" 13 | }, 14 | "extends": ["plugin:react/recommended", "plugin:react/jsx-runtime"], 15 | "rules": { 16 | "react/react-in-jsx-scope": "off", 17 | "semi": [2, "always"] 18 | }, 19 | "settings": { 20 | "react": { 21 | "version": "detect" 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Code/04 Artifacts & Outputs/03 Finished Project/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /Code/04 Artifacts & Outputs/03 Finished Project/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite + React 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Code/04 Artifacts & Outputs/03 Finished Project/src/App.jsx: -------------------------------------------------------------------------------- 1 | import MainContent from './components/MainContent'; 2 | import logo from './assets/images/logo.png'; 3 | 4 | function App() { 5 | return ( 6 | <> 7 |
8 |
9 | 10 |
11 |

Learn & Master GitHub Actions

12 |
13 | 14 | 15 | ); 16 | } 17 | 18 | export default App; 19 | -------------------------------------------------------------------------------- /Code/04 Artifacts & Outputs/03 Finished Project/src/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/academind/github-actions-course-resources/40301953af898062979c4a419ba470f5fa2a75f3/Code/04 Artifacts & Outputs/03 Finished Project/src/assets/images/logo.png -------------------------------------------------------------------------------- /Code/04 Artifacts & Outputs/03 Finished Project/src/components/HelpArea.css: -------------------------------------------------------------------------------- 1 | #help-area { 2 | margin: auto; 3 | display: flex; 4 | } 5 | -------------------------------------------------------------------------------- /Code/04 Artifacts & Outputs/03 Finished Project/src/components/HelpBox.css: -------------------------------------------------------------------------------- 1 | .help-box { 2 | padding: 1rem; 3 | border-radius: 4px; 4 | margin: 1; 5 | flex: 1; 6 | } 7 | 8 | .help-box h2 { 9 | color: #97a2a2; 10 | font-size: 1.05rem; 11 | } -------------------------------------------------------------------------------- /Code/04 Artifacts & Outputs/03 Finished Project/src/components/HelpBox.jsx: -------------------------------------------------------------------------------- 1 | import { string } from 'prop-types'; 2 | 3 | import './HelpBox.css'; 4 | 5 | function HelpBox({ title, text }) { 6 | return ( 7 |
8 |

{title}

9 |

{text}

10 |
11 | ); 12 | } 13 | 14 | HelpBox.propTypes = { 15 | title: string, 16 | text: string, 17 | }; 18 | 19 | export default HelpBox; 20 | -------------------------------------------------------------------------------- /Code/04 Artifacts & Outputs/03 Finished Project/src/components/MainContent.jsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react'; 2 | 3 | import HelpArea from './HelpArea'; 4 | 5 | function MainContent() { 6 | const [helpVisible, setHelpVisible] = useState(false); 7 | 8 | function toggleHelp() { 9 | setHelpVisible((isVisible) => !isVisible); 10 | } 11 | 12 | return ( 13 |
14 | 15 | {helpVisible && } 16 |
17 | ); 18 | } 19 | 20 | export default MainContent; 21 | -------------------------------------------------------------------------------- /Code/04 Artifacts & Outputs/03 Finished Project/src/components/MainContent.test.jsx: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom'; 2 | import { render, screen } from '@testing-library/react'; 3 | import userEvent from '@testing-library/user-event'; 4 | 5 | import MainContent from './MainContent'; 6 | 7 | // My tests! 8 | // Add yet another comment 9 | 10 | describe('MainContent', () => { 11 | it('should render a button', () => { 12 | render(); 13 | 14 | expect(screen.getByRole('button')).toBeInTheDocument(); 15 | }); 16 | 17 | it('should show the help area after clicking the button', async () => { 18 | render(); 19 | 20 | const button = screen.getByRole('button'); 21 | await userEvent.click(button); 22 | expect(screen.getByTestId('help-area')).toBeInTheDocument(); 23 | }); 24 | }); 25 | -------------------------------------------------------------------------------- /Code/04 Artifacts & Outputs/03 Finished Project/src/main.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom/client'; 3 | 4 | import App from './App'; 5 | import './index.css'; 6 | 7 | ReactDOM.createRoot(document.getElementById('root')).render( 8 | 9 | 10 | 11 | ); 12 | -------------------------------------------------------------------------------- /Code/04 Artifacts & Outputs/03 Finished Project/src/test/setup.js: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom'; 2 | -------------------------------------------------------------------------------- /Code/04 Artifacts & Outputs/03 Finished Project/vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import react from '@vitejs/plugin-react'; 3 | import eslint from 'vite-plugin-eslint'; 4 | 5 | // https://vitejs.dev/config/ 6 | export default defineConfig({ 7 | plugins: [react(), eslint()], 8 | test: { 9 | globals: true, 10 | environment: 'jsdom', 11 | setupFiles: './src/test/setup.js', 12 | }, 13 | }); 14 | -------------------------------------------------------------------------------- /Code/05 Environment Variables & Secrets/01 Starting Project/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | /test-results/ 3 | /playwright-report/ 4 | /playwright/.cache/ 5 | -------------------------------------------------------------------------------- /Code/05 Environment Variables & Secrets/01 Starting Project/app.js: -------------------------------------------------------------------------------- 1 | import bodyParser from 'body-parser'; 2 | import express from 'express'; 3 | 4 | import eventRoutes from './routes/events.js'; 5 | 6 | const app = express(); 7 | 8 | app.use(bodyParser.json()); 9 | 10 | app.use(eventRoutes); 11 | 12 | app.listen(process.env.PORT); 13 | -------------------------------------------------------------------------------- /Code/05 Environment Variables & Secrets/01 Starting Project/data/database.js: -------------------------------------------------------------------------------- 1 | import { MongoClient } from 'mongodb'; 2 | 3 | const clusterAddress = process.env.MONGODB_CLUSTER_ADDRESS; 4 | const dbUser = process.env.MONGODB_USERNAME; 5 | const dbPassword = process.env.MONGODB_PASSWORD; 6 | const dbName = process.env.MONGODB_DB_NAME; 7 | 8 | const uri = `mongodb+srv://${dbUser}:${dbPassword}@${clusterAddress}/?retryWrites=true&w=majority`; 9 | const client = new MongoClient(uri); 10 | 11 | console.log('Trying to connect to db'); 12 | 13 | try { 14 | await client.connect(); 15 | await client.db(dbName).command({ ping: 1 }); 16 | console.log('Connected successfully to server'); 17 | } catch (error) { 18 | console.log('Connection failed.'); 19 | await client.close(); 20 | console.log('Connection closed.'); 21 | } 22 | 23 | const database = client.db(dbName); 24 | 25 | export default database; 26 | -------------------------------------------------------------------------------- /Code/05 Environment Variables & Secrets/01 Starting Project/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "backend", 3 | "version": "1.0.0", 4 | "description": "", 5 | "type": "module", 6 | "main": "index.js", 7 | "scripts": { 8 | "start": "node app.js", 9 | "test": "npx playwright test" 10 | }, 11 | "keywords": [], 12 | "author": "", 13 | "license": "ISC", 14 | "dependencies": { 15 | "body-parser": "^1.20.0", 16 | "express": "^4.18.1", 17 | "mongodb": "^4.9.1" 18 | }, 19 | "devDependencies": { 20 | "@playwright/test": "^1.25.1", 21 | "playwright": "^1.25.1" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Code/05 Environment Variables & Secrets/01 Starting Project/routes/events.js: -------------------------------------------------------------------------------- 1 | import { Router } from 'express'; 2 | 3 | import db from '../data/database.js'; 4 | 5 | const router = Router(); 6 | 7 | router.get('/', async (req, res) => { 8 | const allEvents = await db.collection('events').find().toArray(); 9 | res.json({ events: allEvents }); 10 | }); 11 | 12 | router.post('/', async (req, res) => { 13 | const eventData = req.body; 14 | const result = await db.collection('events').insertOne({...eventData}); 15 | res.status(201).json({ 16 | message: 'Event created.', 17 | event: { ...eventData, id: result.insertedId }, 18 | }); 19 | }); 20 | 21 | export default router; 22 | -------------------------------------------------------------------------------- /Code/05 Environment Variables & Secrets/02 Finished Project/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | /test-results/ 3 | /playwright-report/ 4 | /playwright/.cache/ 5 | -------------------------------------------------------------------------------- /Code/05 Environment Variables & Secrets/02 Finished Project/app.js: -------------------------------------------------------------------------------- 1 | import bodyParser from 'body-parser'; 2 | import express from 'express'; 3 | 4 | import eventRoutes from './routes/events.js'; 5 | 6 | const app = express(); 7 | 8 | app.use(bodyParser.json()); 9 | 10 | app.use(eventRoutes); 11 | 12 | app.listen(process.env.PORT); 13 | -------------------------------------------------------------------------------- /Code/05 Environment Variables & Secrets/02 Finished Project/data/database.js: -------------------------------------------------------------------------------- 1 | import { MongoClient } from 'mongodb'; 2 | 3 | const clusterAddress = process.env.MONGODB_CLUSTER_ADDRESS; 4 | const dbUser = process.env.MONGODB_USERNAME; 5 | const dbPassword = process.env.MONGODB_PASSWORD; 6 | const dbName = process.env.MONGODB_DB_NAME; 7 | 8 | const uri = `mongodb+srv://${dbUser}:${dbPassword}@${clusterAddress}/?retryWrites=true&w=majority`; 9 | const client = new MongoClient(uri); 10 | 11 | console.log('Trying to connect to db'); 12 | 13 | try { 14 | await client.connect(); 15 | await client.db(dbName).command({ ping: 1 }); 16 | console.log('Connected successfully to server'); 17 | } catch (error) { 18 | console.log('Connection failed.'); 19 | await client.close(); 20 | console.log('Connection closed.'); 21 | } 22 | 23 | const database = client.db(dbName); 24 | 25 | export default database; 26 | -------------------------------------------------------------------------------- /Code/05 Environment Variables & Secrets/02 Finished Project/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "backend", 3 | "version": "1.0.0", 4 | "description": "", 5 | "type": "module", 6 | "main": "index.js", 7 | "scripts": { 8 | "start": "node app.js", 9 | "test": "npx playwright test" 10 | }, 11 | "keywords": [], 12 | "author": "", 13 | "license": "ISC", 14 | "dependencies": { 15 | "body-parser": "^1.20.0", 16 | "express": "^4.18.1", 17 | "mongodb": "^4.9.1" 18 | }, 19 | "devDependencies": { 20 | "@playwright/test": "^1.25.1", 21 | "playwright": "^1.25.1" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Code/05 Environment Variables & Secrets/02 Finished Project/routes/events.js: -------------------------------------------------------------------------------- 1 | import { Router } from 'express'; 2 | 3 | import db from '../data/database.js'; 4 | 5 | const router = Router(); 6 | 7 | router.get('/', async (req, res) => { 8 | const allEvents = await db.collection('events').find().toArray(); 9 | res.json({ events: allEvents }); 10 | }); 11 | 12 | router.post('/', async (req, res) => { 13 | const eventData = req.body; 14 | const result = await db.collection('events').insertOne({...eventData}); 15 | res.status(201).json({ 16 | message: 'Event created.', 17 | event: { ...eventData, id: result.insertedId }, 18 | }); 19 | }); 20 | 21 | export default router; 22 | -------------------------------------------------------------------------------- /Code/06 Execution Flow/01 Starting Project/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "env": { 4 | "node": true, 5 | "browser": true 6 | }, 7 | "parserOptions": { 8 | "ecmaFeatures": { 9 | "jsx": true 10 | }, 11 | "ecmaVersion": "latest", 12 | "sourceType": "module" 13 | }, 14 | "extends": ["plugin:react/recommended", "plugin:react/jsx-runtime"], 15 | "rules": { 16 | "react/react-in-jsx-scope": "off", 17 | "semi": [2, "always"] 18 | }, 19 | "settings": { 20 | "react": { 21 | "version": "detect" 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Code/06 Execution Flow/01 Starting Project/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /Code/06 Execution Flow/01 Starting Project/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite + React 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Code/06 Execution Flow/01 Starting Project/src/App.jsx: -------------------------------------------------------------------------------- 1 | import MainContent from './components/MainContent'; 2 | import logo from './assets/images/logo.png'; 3 | 4 | function App() { 5 | return ( 6 | <> 7 |
8 |
9 | 10 |
11 |

Learn & Master GitHub Actions

12 |
13 | 14 | 15 | ); 16 | } 17 | 18 | export default App; 19 | -------------------------------------------------------------------------------- /Code/06 Execution Flow/01 Starting Project/src/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/academind/github-actions-course-resources/40301953af898062979c4a419ba470f5fa2a75f3/Code/06 Execution Flow/01 Starting Project/src/assets/images/logo.png -------------------------------------------------------------------------------- /Code/06 Execution Flow/01 Starting Project/src/components/HelpArea.css: -------------------------------------------------------------------------------- 1 | #help-area { 2 | margin: auto; 3 | display: flex; 4 | } 5 | -------------------------------------------------------------------------------- /Code/06 Execution Flow/01 Starting Project/src/components/HelpBox.css: -------------------------------------------------------------------------------- 1 | .help-box { 2 | padding: 1rem; 3 | border-radius: 4px; 4 | margin: 1; 5 | flex: 1; 6 | } 7 | 8 | .help-box h2 { 9 | color: #97a2a2; 10 | font-size: 1.05rem; 11 | } -------------------------------------------------------------------------------- /Code/06 Execution Flow/01 Starting Project/src/components/HelpBox.jsx: -------------------------------------------------------------------------------- 1 | import { string } from 'prop-types'; 2 | 3 | import './HelpBox.css'; 4 | 5 | function HelpBox({ title, text }) { 6 | return ( 7 |
8 |

{title}

9 |

{text}

10 |
11 | ); 12 | } 13 | 14 | HelpBox.propTypes = { 15 | title: string, 16 | text: string, 17 | }; 18 | 19 | export default HelpBox; 20 | -------------------------------------------------------------------------------- /Code/06 Execution Flow/01 Starting Project/src/components/MainContent.jsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react'; 2 | 3 | import HelpArea from './HelpArea'; 4 | 5 | function MainContent() { 6 | const [helpVisible, setHelpVisible] = useState(false); 7 | 8 | function toggleHelp() { 9 | setHelpVisible((isVisible) => !isVisible); 10 | } 11 | 12 | return ( 13 |
14 | 15 | {helpVisible && } 16 |
17 | ); 18 | } 19 | 20 | export default MainContent; 21 | -------------------------------------------------------------------------------- /Code/06 Execution Flow/01 Starting Project/src/components/MainContent.test.jsx: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom'; 2 | import { render, screen } from '@testing-library/react'; 3 | import userEvent from '@testing-library/user-event'; 4 | 5 | import MainContent from './MainContent'; 6 | 7 | // My tests! 8 | // Add yet another comment 9 | 10 | describe('MainContent', () => { 11 | it('should render a button', () => { 12 | render(); 13 | 14 | expect(screen.getByRole('button')).toBeInTheDocument(); 15 | }); 16 | 17 | it('should show the help area after clicking the button', async () => { 18 | render(); 19 | 20 | const button = screen.getByRole('button'); 21 | await userEvent.click(button); 22 | expect(screen.getByTestId('help-area')).toBeInTheDocument(); 23 | }); 24 | }); 25 | -------------------------------------------------------------------------------- /Code/06 Execution Flow/01 Starting Project/src/main.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom/client'; 3 | 4 | import App from './App'; 5 | import './index.css'; 6 | 7 | ReactDOM.createRoot(document.getElementById('root')).render( 8 | 9 | 10 | 11 | ); 12 | -------------------------------------------------------------------------------- /Code/06 Execution Flow/01 Starting Project/src/test/setup.js: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom'; 2 | -------------------------------------------------------------------------------- /Code/06 Execution Flow/01 Starting Project/vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import react from '@vitejs/plugin-react'; 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [react()], 7 | test: { 8 | globals: true, 9 | environment: 'jsdom', 10 | setupFiles: './src/test/setup.js', 11 | reporters: ['json'], 12 | outputFile: 'test.json' 13 | }, 14 | }); 15 | -------------------------------------------------------------------------------- /Code/06 Execution Flow/02 Finished Project/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "env": { 4 | "node": true, 5 | "browser": true 6 | }, 7 | "parserOptions": { 8 | "ecmaFeatures": { 9 | "jsx": true 10 | }, 11 | "ecmaVersion": "latest", 12 | "sourceType": "module" 13 | }, 14 | "extends": ["plugin:react/recommended", "plugin:react/jsx-runtime"], 15 | "rules": { 16 | "react/react-in-jsx-scope": "off", 17 | "semi": [2, "always"] 18 | }, 19 | "settings": { 20 | "react": { 21 | "version": "detect" 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Code/06 Execution Flow/02 Finished Project/.github/workflows/matrix.yml: -------------------------------------------------------------------------------- 1 | name: Matrix Demo 2 | on: push 3 | jobs: 4 | build: 5 | continue-on-error: true 6 | strategy: 7 | matrix: 8 | node-version: [12, 14, 16] 9 | operating-system: [ubuntu-latest, windows-latest] 10 | include: 11 | - node-version: 18 12 | operating-system: ubuntu-latest 13 | exclude: 14 | - node-version: 12 15 | operating-system: windows-latest 16 | runs-on: ${{ matrix.operating-system }} 17 | steps: 18 | - name: Get Code 19 | uses: actions/checkout@v3 20 | - name: Install NodeJS 21 | uses: actions/setup-node@v3 22 | with: 23 | node-version: ${{ matrix.node-version }} 24 | - name: Install Dependencies 25 | run: npm ci 26 | - name: Build project 27 | run: npm run build -------------------------------------------------------------------------------- /Code/06 Execution Flow/02 Finished Project/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /Code/06 Execution Flow/02 Finished Project/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite + React 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Code/06 Execution Flow/02 Finished Project/src/App.jsx: -------------------------------------------------------------------------------- 1 | import MainContent from './components/MainContent'; 2 | import logo from './assets/images/logo.png'; 3 | 4 | function App() { 5 | return ( 6 | <> 7 |
8 |
9 | 10 |
11 |

Learn & Master GitHub Actions

12 |
13 | 14 | 15 | ); 16 | } 17 | 18 | export default App; 19 | -------------------------------------------------------------------------------- /Code/06 Execution Flow/02 Finished Project/src/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/academind/github-actions-course-resources/40301953af898062979c4a419ba470f5fa2a75f3/Code/06 Execution Flow/02 Finished Project/src/assets/images/logo.png -------------------------------------------------------------------------------- /Code/06 Execution Flow/02 Finished Project/src/components/HelpArea.css: -------------------------------------------------------------------------------- 1 | #help-area { 2 | margin: auto; 3 | display: flex; 4 | } 5 | -------------------------------------------------------------------------------- /Code/06 Execution Flow/02 Finished Project/src/components/HelpBox.css: -------------------------------------------------------------------------------- 1 | .help-box { 2 | padding: 1rem; 3 | border-radius: 4px; 4 | margin: 1; 5 | flex: 1; 6 | } 7 | 8 | .help-box h2 { 9 | color: #97a2a2; 10 | font-size: 1.05rem; 11 | } -------------------------------------------------------------------------------- /Code/06 Execution Flow/02 Finished Project/src/components/HelpBox.jsx: -------------------------------------------------------------------------------- 1 | import { string } from 'prop-types'; 2 | 3 | import './HelpBox.css'; 4 | 5 | function HelpBox({ title, text }) { 6 | return ( 7 |
8 |

{title}

9 |

{text}

10 |
11 | ); 12 | } 13 | 14 | HelpBox.propTypes = { 15 | title: string, 16 | text: string, 17 | }; 18 | 19 | export default HelpBox; 20 | -------------------------------------------------------------------------------- /Code/06 Execution Flow/02 Finished Project/src/components/MainContent.jsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react'; 2 | 3 | import HelpArea from './HelpArea'; 4 | 5 | function MainContent() { 6 | const [helpVisible, setHelpVisible] = useState(false); 7 | 8 | function toggleHelp() { 9 | setHelpVisible((isVisible) => !isVisible); 10 | } 11 | 12 | return ( 13 |
14 | 15 | {helpVisible && } 16 |
17 | ); 18 | } 19 | 20 | export default MainContent; 21 | -------------------------------------------------------------------------------- /Code/06 Execution Flow/02 Finished Project/src/components/MainContent.test.jsx: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom'; 2 | import { render, screen } from '@testing-library/react'; 3 | import userEvent from '@testing-library/user-event'; 4 | 5 | import MainContent from './MainContent'; 6 | 7 | // My tests! 8 | // Add yet another comment 9 | 10 | describe('MainContent', () => { 11 | it('should render a button', () => { 12 | render(); 13 | 14 | expect(screen.getByRole('button')).toBeInTheDocument(); 15 | }); 16 | 17 | it('should show the help area after clicking the button', async () => { 18 | render(); 19 | 20 | const button = screen.getByRole('button'); 21 | await userEvent.click(button); 22 | expect(screen.getByTestId('help-area')).toBeInTheDocument(); 23 | }); 24 | }); 25 | -------------------------------------------------------------------------------- /Code/06 Execution Flow/02 Finished Project/src/main.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom/client'; 3 | 4 | import App from './App'; 5 | import './index.css'; 6 | 7 | ReactDOM.createRoot(document.getElementById('root')).render( 8 | 9 | 10 | 11 | ); 12 | -------------------------------------------------------------------------------- /Code/06 Execution Flow/02 Finished Project/src/test/setup.js: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom'; 2 | -------------------------------------------------------------------------------- /Code/06 Execution Flow/02 Finished Project/vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import react from '@vitejs/plugin-react'; 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [react()], 7 | test: { 8 | globals: true, 9 | environment: 'jsdom', 10 | setupFiles: './src/test/setup.js', 11 | reporters: ['json'], 12 | outputFile: 'test.json' 13 | }, 14 | }); 15 | -------------------------------------------------------------------------------- /Code/07 Containers/01 Starting Project/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | /test-results/ 3 | /playwright-report/ 4 | /playwright/.cache/ 5 | -------------------------------------------------------------------------------- /Code/07 Containers/01 Starting Project/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "window.zoomLevel": 7 3 | } -------------------------------------------------------------------------------- /Code/07 Containers/01 Starting Project/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:16 2 | 3 | ENV MONGODB_CONNECTION_PROTOCOL mongodb+srv 4 | ENV MONGODB_DB_NAME gha-demo1 5 | ENV MONGODB_CLUSTER_ADDRESS cluster0.ntrwp.mongodb.net 6 | ENV MONGODB_USERNAME maximilian 7 | ENV MONGODB_PASSWORD eI3R3UfNlJgWJe17 8 | 9 | WORKDIR /app 10 | 11 | COPY package*.json . 12 | 13 | RUN npm install 14 | 15 | COPY . . 16 | 17 | CMD ["npm", "start"] -------------------------------------------------------------------------------- /Code/07 Containers/01 Starting Project/app.js: -------------------------------------------------------------------------------- 1 | import bodyParser from 'body-parser'; 2 | import express from 'express'; 3 | 4 | import eventRoutes from './routes/events.js'; 5 | 6 | const app = express(); 7 | 8 | app.use(bodyParser.json()); 9 | 10 | app.use(eventRoutes); 11 | 12 | app.listen(process.env.PORT); 13 | -------------------------------------------------------------------------------- /Code/07 Containers/01 Starting Project/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "backend", 3 | "version": "1.0.0", 4 | "description": "", 5 | "type": "module", 6 | "main": "index.js", 7 | "scripts": { 8 | "start": "node app.js", 9 | "test": "npx playwright test" 10 | }, 11 | "keywords": [], 12 | "author": "", 13 | "license": "ISC", 14 | "dependencies": { 15 | "body-parser": "^1.20.0", 16 | "express": "^4.18.1", 17 | "mongodb": "^4.9.1" 18 | }, 19 | "devDependencies": { 20 | "@playwright/test": "^1.25.1", 21 | "playwright": "^1.25.1" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Code/07 Containers/01 Starting Project/routes/events.js: -------------------------------------------------------------------------------- 1 | import { Router } from 'express'; 2 | 3 | import db from '../data/database.js'; 4 | 5 | const router = Router(); 6 | 7 | router.get('/', async (req, res) => { 8 | const allEvents = await db.collection('events').find().toArray(); 9 | res.json({ events: allEvents }); 10 | }); 11 | 12 | router.post('/', async (req, res) => { 13 | const eventData = req.body; 14 | const result = await db.collection('events').insertOne({...eventData}); 15 | res.status(201).json({ 16 | message: 'Event created.', 17 | event: { ...eventData, id: result.insertedId }, 18 | }); 19 | }); 20 | 21 | export default router; 22 | -------------------------------------------------------------------------------- /Code/07 Containers/02 Finished Project/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | /test-results/ 3 | /playwright-report/ 4 | /playwright/.cache/ 5 | -------------------------------------------------------------------------------- /Code/07 Containers/02 Finished Project/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "window.zoomLevel": 7 3 | } -------------------------------------------------------------------------------- /Code/07 Containers/02 Finished Project/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:16 2 | 3 | ENV MONGODB_CONNECTION_PROTOCOL mongodb+srv 4 | ENV MONGODB_DB_NAME gha-demo1 5 | ENV MONGODB_CLUSTER_ADDRESS cluster0.ntrwp.mongodb.net 6 | ENV MONGODB_USERNAME maximilian 7 | ENV MONGODB_PASSWORD eI3R3UfNlJgWJe17 8 | 9 | WORKDIR /app 10 | 11 | COPY package*.json . 12 | 13 | RUN npm install 14 | 15 | COPY . . 16 | 17 | CMD ["npm", "start"] -------------------------------------------------------------------------------- /Code/07 Containers/02 Finished Project/app.js: -------------------------------------------------------------------------------- 1 | import bodyParser from 'body-parser'; 2 | import express from 'express'; 3 | 4 | import eventRoutes from './routes/events.js'; 5 | 6 | const app = express(); 7 | 8 | app.use(bodyParser.json()); 9 | 10 | app.use(eventRoutes); 11 | 12 | app.listen(process.env.PORT); 13 | -------------------------------------------------------------------------------- /Code/07 Containers/02 Finished Project/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "backend", 3 | "version": "1.0.0", 4 | "description": "", 5 | "type": "module", 6 | "main": "index.js", 7 | "scripts": { 8 | "start": "node app.js", 9 | "test": "npx playwright test" 10 | }, 11 | "keywords": [], 12 | "author": "", 13 | "license": "ISC", 14 | "dependencies": { 15 | "body-parser": "^1.20.0", 16 | "express": "^4.18.1", 17 | "mongodb": "^4.9.1" 18 | }, 19 | "devDependencies": { 20 | "@playwright/test": "^1.25.1", 21 | "playwright": "^1.25.1" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Code/07 Containers/02 Finished Project/routes/events.js: -------------------------------------------------------------------------------- 1 | import { Router } from 'express'; 2 | 3 | import db from '../data/database.js'; 4 | 5 | const router = Router(); 6 | 7 | router.get('/', async (req, res) => { 8 | const allEvents = await db.collection('events').find().toArray(); 9 | res.json({ events: allEvents }); 10 | }); 11 | 12 | router.post('/', async (req, res) => { 13 | const eventData = req.body; 14 | const result = await db.collection('events').insertOne({...eventData}); 15 | res.status(201).json({ 16 | message: 'Event created.', 17 | event: { ...eventData, id: result.insertedId }, 18 | }); 19 | }); 20 | 21 | export default router; 22 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/01 Starting Project/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "env": { 4 | "node": true, 5 | "browser": true 6 | }, 7 | "parserOptions": { 8 | "ecmaFeatures": { 9 | "jsx": true 10 | }, 11 | "ecmaVersion": "latest", 12 | "sourceType": "module" 13 | }, 14 | "extends": ["plugin:react/recommended", "plugin:react/jsx-runtime"], 15 | "rules": { 16 | "react/react-in-jsx-scope": "off", 17 | "semi": [2, "always"] 18 | }, 19 | "settings": { 20 | "react": { 21 | "version": "detect" 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/01 Starting Project/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | /node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/01 Starting Project/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite + React 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/01 Starting Project/src/App.jsx: -------------------------------------------------------------------------------- 1 | import MainContent from './components/MainContent'; 2 | import logo from './assets/images/logo.png'; 3 | 4 | function App() { 5 | return ( 6 | <> 7 |
8 |
9 | 10 |
11 |

Learn & Master GitHub Actions

12 |
13 | 14 | 15 | ); 16 | } 17 | 18 | export default App; 19 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/01 Starting Project/src/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/academind/github-actions-course-resources/40301953af898062979c4a419ba470f5fa2a75f3/Code/08 Custom Actions/01 Starting Project/src/assets/images/logo.png -------------------------------------------------------------------------------- /Code/08 Custom Actions/01 Starting Project/src/components/HelpArea.css: -------------------------------------------------------------------------------- 1 | #help-area { 2 | margin: auto; 3 | display: flex; 4 | } 5 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/01 Starting Project/src/components/HelpBox.css: -------------------------------------------------------------------------------- 1 | .help-box { 2 | padding: 1rem; 3 | border-radius: 4px; 4 | margin: 1; 5 | flex: 1; 6 | } 7 | 8 | .help-box h2 { 9 | color: #97a2a2; 10 | font-size: 1.05rem; 11 | } -------------------------------------------------------------------------------- /Code/08 Custom Actions/01 Starting Project/src/components/HelpBox.jsx: -------------------------------------------------------------------------------- 1 | import { string } from 'prop-types'; 2 | 3 | import './HelpBox.css'; 4 | 5 | function HelpBox({ title, text }) { 6 | return ( 7 |
8 |

{title}

9 |

{text}

10 |
11 | ); 12 | } 13 | 14 | HelpBox.propTypes = { 15 | title: string, 16 | text: string, 17 | }; 18 | 19 | export default HelpBox; 20 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/01 Starting Project/src/components/MainContent.jsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react'; 2 | 3 | import HelpArea from './HelpArea'; 4 | 5 | function MainContent() { 6 | const [helpVisible, setHelpVisible] = useState(false); 7 | 8 | function toggleHelp() { 9 | setHelpVisible((isVisible) => !isVisible); 10 | } 11 | 12 | return ( 13 |
14 | 15 | {helpVisible && } 16 |
17 | ); 18 | } 19 | 20 | export default MainContent; 21 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/01 Starting Project/src/components/MainContent.test.jsx: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom'; 2 | import { render, screen } from '@testing-library/react'; 3 | import userEvent from '@testing-library/user-event'; 4 | 5 | import MainContent from './MainContent'; 6 | 7 | // My tests! 8 | // Add yet another comment 9 | 10 | describe('MainContent', () => { 11 | it('should render a button', () => { 12 | render(); 13 | 14 | expect(screen.getByRole('button')).toBeInTheDocument(); 15 | }); 16 | 17 | it('should show the help area after clicking the button', async () => { 18 | render(); 19 | 20 | const button = screen.getByRole('button'); 21 | await userEvent.click(button); 22 | expect(screen.getByTestId('help-area')).toBeInTheDocument(); 23 | }); 24 | }); 25 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/01 Starting Project/src/main.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom/client'; 3 | 4 | import App from './App'; 5 | import './index.css'; 6 | 7 | ReactDOM.createRoot(document.getElementById('root')).render( 8 | 9 | 10 | 11 | ); 12 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/01 Starting Project/src/test/setup.js: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom'; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/01 Starting Project/vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import react from '@vitejs/plugin-react'; 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [react()], 7 | test: { 8 | globals: true, 9 | environment: 'jsdom', 10 | setupFiles: './src/test/setup.js', 11 | reporters: ['json'], 12 | outputFile: 'test.json' 13 | }, 14 | }); 15 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/02 Docker Code/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "env": { 4 | "node": true, 5 | "browser": true 6 | }, 7 | "parserOptions": { 8 | "ecmaFeatures": { 9 | "jsx": true 10 | }, 11 | "ecmaVersion": "latest", 12 | "sourceType": "module" 13 | }, 14 | "extends": ["plugin:react/recommended", "plugin:react/jsx-runtime"], 15 | "rules": { 16 | "react/react-in-jsx-scope": "off", 17 | "semi": [2, "always"] 18 | }, 19 | "settings": { 20 | "react": { 21 | "version": "detect" 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/02 Docker Code/.github/actions/deploy-s3-docker/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3 2 | 3 | COPY requirements.txt /requirements.txt 4 | 5 | RUN pip install -r requirements.txt 6 | 7 | COPY deployment.py /deployment.py 8 | 9 | CMD ["python", "/deployment.py"] -------------------------------------------------------------------------------- /Code/08 Custom Actions/02 Docker Code/.github/actions/deploy-s3-docker/requirements.txt: -------------------------------------------------------------------------------- 1 | boto3==1.24.71 2 | botocore==1.27.71 3 | jmespath==1.0.1 4 | python-dateutil==2.8.2 5 | s3transfer==0.6.0 6 | six==1.16.0 7 | urllib3==1.26.12 8 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/02 Docker Code/.github/actions/deploy-s3-javascript/action.yml: -------------------------------------------------------------------------------- 1 | name: 'Deploy to AWS S3' 2 | description: 'Deploy a static website via AWS S3.' 3 | inputs: 4 | bucket: 5 | description: 'The S3 bucket name.' 6 | required: true 7 | bucket-region: 8 | description: 'The region of the S3 bucket.' 9 | required: false 10 | default: 'us-east-1' 11 | dist-folder: 12 | description: 'The folder containing the deployable files.' 13 | required: true 14 | outputs: 15 | website-url: 16 | description: 'The URL of the deployed website.' 17 | runs: 18 | using: 'node16' 19 | main: 'main.js' -------------------------------------------------------------------------------- /Code/08 Custom Actions/02 Docker Code/.github/actions/deploy-s3-javascript/main.js: -------------------------------------------------------------------------------- 1 | const core = require('@actions/core'); 2 | // const github = require('@actions/github'); 3 | const exec = require('@actions/exec'); 4 | 5 | function run() { 6 | // 1) Get some input values 7 | const bucket = core.getInput('bucket', { required: true }); 8 | const bucketRegion = core.getInput('bucket-region', { required: true }); 9 | const distFolder = core.getInput('dist-folder', { required: true }); 10 | 11 | // 2) Upload files 12 | const s3Uri = `s3://${bucket}`; 13 | exec.exec(`aws s3 sync ${distFolder} ${s3Uri} --region ${bucketRegion}`); 14 | 15 | const websiteUrl = `http://${bucket}.s3-website-${bucketRegion}.amazonaws.com`; 16 | core.setOutput('website-url', websiteUrl); // echo "website-url=..." >> $GITHUB_OUTPUT 17 | } 18 | 19 | run(); 20 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/02 Docker Code/.github/actions/deploy-s3-javascript/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "deploy-s3-javascript", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "main.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "@actions/core": "^1.9.1", 14 | "@actions/exec": "^1.1.1", 15 | "@actions/github": "^5.0.3" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/02 Docker Code/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | /node_modules 11 | /dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/02 Docker Code/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite + React 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/02 Docker Code/src/App.jsx: -------------------------------------------------------------------------------- 1 | import MainContent from './components/MainContent'; 2 | import logo from './assets/images/logo.png'; 3 | 4 | function App() { 5 | return ( 6 | <> 7 |
8 |
9 | 10 |
11 |

Learn & Master GitHub Actions

12 |
13 | 14 | 15 | ); 16 | } 17 | 18 | export default App; 19 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/02 Docker Code/src/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/academind/github-actions-course-resources/40301953af898062979c4a419ba470f5fa2a75f3/Code/08 Custom Actions/02 Docker Code/src/assets/images/logo.png -------------------------------------------------------------------------------- /Code/08 Custom Actions/02 Docker Code/src/components/HelpArea.css: -------------------------------------------------------------------------------- 1 | #help-area { 2 | margin: auto; 3 | display: flex; 4 | } 5 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/02 Docker Code/src/components/HelpBox.css: -------------------------------------------------------------------------------- 1 | .help-box { 2 | padding: 1rem; 3 | border-radius: 4px; 4 | margin: 1; 5 | flex: 1; 6 | } 7 | 8 | .help-box h2 { 9 | color: #97a2a2; 10 | font-size: 1.05rem; 11 | } -------------------------------------------------------------------------------- /Code/08 Custom Actions/02 Docker Code/src/components/HelpBox.jsx: -------------------------------------------------------------------------------- 1 | import { string } from 'prop-types'; 2 | 3 | import './HelpBox.css'; 4 | 5 | function HelpBox({ title, text }) { 6 | return ( 7 |
8 |

{title}

9 |

{text}

10 |
11 | ); 12 | } 13 | 14 | HelpBox.propTypes = { 15 | title: string, 16 | text: string, 17 | }; 18 | 19 | export default HelpBox; 20 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/02 Docker Code/src/components/MainContent.jsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react'; 2 | 3 | import HelpArea from './HelpArea'; 4 | 5 | function MainContent() { 6 | const [helpVisible, setHelpVisible] = useState(false); 7 | 8 | function toggleHelp() { 9 | setHelpVisible((isVisible) => !isVisible); 10 | } 11 | 12 | return ( 13 |
14 | 15 | {helpVisible && } 16 |
17 | ); 18 | } 19 | 20 | export default MainContent; 21 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/02 Docker Code/src/components/MainContent.test.jsx: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom'; 2 | import { render, screen } from '@testing-library/react'; 3 | import userEvent from '@testing-library/user-event'; 4 | 5 | import MainContent from './MainContent'; 6 | 7 | // My tests! 8 | // Add yet another comment 9 | 10 | describe('MainContent', () => { 11 | it('should render a button', () => { 12 | render(); 13 | 14 | expect(screen.getByRole('button')).toBeInTheDocument(); 15 | }); 16 | 17 | it('should show the help area after clicking the button', async () => { 18 | render(); 19 | 20 | const button = screen.getByRole('button'); 21 | await userEvent.click(button); 22 | expect(screen.getByTestId('help-area')).toBeInTheDocument(); 23 | }); 24 | }); 25 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/02 Docker Code/src/main.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom/client'; 3 | 4 | import App from './App'; 5 | import './index.css'; 6 | 7 | ReactDOM.createRoot(document.getElementById('root')).render( 8 | 9 | 10 | 11 | ); 12 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/02 Docker Code/src/test/setup.js: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom'; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/02 Docker Code/vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import react from '@vitejs/plugin-react'; 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [react()], 7 | test: { 8 | globals: true, 9 | environment: 'jsdom', 10 | setupFiles: './src/test/setup.js', 11 | reporters: ['json'], 12 | outputFile: 'test.json' 13 | }, 14 | }); 15 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "env": { 4 | "node": true, 5 | "browser": true 6 | }, 7 | "parserOptions": { 8 | "ecmaFeatures": { 9 | "jsx": true 10 | }, 11 | "ecmaVersion": "latest", 12 | "sourceType": "module" 13 | }, 14 | "extends": ["plugin:react/recommended", "plugin:react/jsx-runtime"], 15 | "rules": { 16 | "react/react-in-jsx-scope": "off", 17 | "semi": [2, "always"] 18 | }, 19 | "settings": { 20 | "react": { 21 | "version": "detect" 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-docker/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3 2 | 3 | COPY requirements.txt /requirements.txt 4 | 5 | RUN pip install -r requirements.txt 6 | 7 | COPY deployment.py /deployment.py 8 | 9 | CMD ["python", "/deployment.py"] -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-docker/action.yml: -------------------------------------------------------------------------------- 1 | name: 'Deploy to AWS S3' 2 | description: 'Deploy a static website via AWS S3.' 3 | inputs: 4 | bucket: 5 | description: 'The S3 bucket name.' 6 | required: true 7 | bucket-region: 8 | description: 'The region of the S3 bucket.' 9 | required: false 10 | default: 'us-east-1' 11 | dist-folder: 12 | description: 'The folder containing the deployable files.' 13 | required: true 14 | outputs: 15 | website-url: 16 | description: 'The URL of the deployed website.' 17 | runs: 18 | using: 'docker' 19 | image: 'Dockerfile' -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-docker/requirements.txt: -------------------------------------------------------------------------------- 1 | boto3==1.24.71 2 | botocore==1.27.71 3 | jmespath==1.0.1 4 | python-dateutil==2.8.2 5 | s3transfer==0.6.0 6 | six==1.16.0 7 | urllib3==1.26.12 8 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/action.yml: -------------------------------------------------------------------------------- 1 | name: 'Deploy to AWS S3' 2 | description: 'Deploy a static website via AWS S3.' 3 | inputs: 4 | bucket: 5 | description: 'The S3 bucket name.' 6 | required: true 7 | bucket-region: 8 | description: 'The region of the S3 bucket.' 9 | required: false 10 | default: 'us-east-1' 11 | dist-folder: 12 | description: 'The folder containing the deployable files.' 13 | required: true 14 | outputs: 15 | website-url: 16 | description: 'The URL of the deployed website.' 17 | runs: 18 | using: 'node16' 19 | main: 'main.js' -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/main.js: -------------------------------------------------------------------------------- 1 | const core = require('@actions/core'); 2 | // const github = require('@actions/github'); 3 | const exec = require('@actions/exec'); 4 | 5 | function run() { 6 | // 1) Get some input values 7 | const bucket = core.getInput('bucket', { required: true }); 8 | const bucketRegion = core.getInput('bucket-region', { required: true }); 9 | const distFolder = core.getInput('dist-folder', { required: true }); 10 | 11 | // 2) Upload files 12 | const s3Uri = `s3://${bucket}`; 13 | exec.exec(`aws s3 sync ${distFolder} ${s3Uri} --region ${bucketRegion}`); 14 | 15 | const websiteUrl = `http://${bucket}.s3-website-${bucketRegion}.amazonaws.com`; 16 | core.setOutput('website-url', websiteUrl); // echo "website-url=..." >> $GITHUB_OUTPUT 17 | } 18 | 19 | run(); 20 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/.bin/uuid: -------------------------------------------------------------------------------- 1 | ../uuid/dist/bin/uuid -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@actions/core/lib/command.d.ts: -------------------------------------------------------------------------------- 1 | export interface CommandProperties { 2 | [key: string]: any; 3 | } 4 | /** 5 | * Commands 6 | * 7 | * Command Format: 8 | * ::name key=value,key=value::message 9 | * 10 | * Examples: 11 | * ::warning::This is the message 12 | * ::set-env name=MY_VAR::some value 13 | */ 14 | export declare function issueCommand(command: string, properties: CommandProperties, message: any): void; 15 | export declare function issue(name: string, message?: string): void; 16 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@actions/core/lib/file-command.d.ts: -------------------------------------------------------------------------------- 1 | export declare function issueCommand(command: string, message: any): void; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@actions/core/lib/file-command.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"file-command.js","sourceRoot":"","sources":["../src/file-command.ts"],"names":[],"mappings":";AAAA,uCAAuC;;;;;;;;;;;;;;;;;;;;;;AAEvC,mCAAmC;AACnC,uDAAuD;AAEvD,uCAAwB;AACxB,uCAAwB;AACxB,mCAAsC;AAEtC,SAAgB,YAAY,CAAC,OAAe,EAAE,OAAY;IACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,OAAO,EAAE,CAAC,CAAA;IACjD,IAAI,CAAC,QAAQ,EAAE;QACb,MAAM,IAAI,KAAK,CACb,wDAAwD,OAAO,EAAE,CAClE,CAAA;KACF;IACD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;QAC5B,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAA;KACrD;IAED,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,GAAG,sBAAc,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;QACjE,QAAQ,EAAE,MAAM;KACjB,CAAC,CAAA;AACJ,CAAC;AAdD,oCAcC"} -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@actions/core/lib/oidc-utils.d.ts: -------------------------------------------------------------------------------- 1 | export declare class OidcClient { 2 | private static createHttpClient; 3 | private static getRequestToken; 4 | private static getIDTokenUrl; 5 | private static getCall; 6 | static getIDToken(audience?: string): Promise; 7 | } 8 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@actions/core/lib/path-utils.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"path-utils.js","sourceRoot":"","sources":["../src/path-utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA4B;AAE5B;;;;;;GAMG;AACH,SAAgB,WAAW,CAAC,GAAW;IACrC,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;AAClC,CAAC;AAFD,kCAEC;AAED;;;;;;GAMG;AACH,SAAgB,WAAW,CAAC,GAAW;IACrC,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;AAClC,CAAC;AAFD,kCAEC;AAED;;;;;;;GAOG;AACH,SAAgB,cAAc,CAAC,GAAW;IACxC,OAAO,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;AACxC,CAAC;AAFD,wCAEC"} -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@actions/core/lib/utils.d.ts: -------------------------------------------------------------------------------- 1 | import { AnnotationProperties } from './core'; 2 | import { CommandProperties } from './command'; 3 | /** 4 | * Sanitizes an input into a string so it can be passed into issueCommand safely 5 | * @param input input to sanitize into a string 6 | */ 7 | export declare function toCommandValue(input: any): string; 8 | /** 9 | * 10 | * @param annotationProperties 11 | * @returns The command properties to send with the actual annotation command 12 | * See IssueCommandProperties: https://github.com/actions/runner/blob/main/src/Runner.Worker/ActionCommandManager.cs#L646 13 | */ 14 | export declare function toCommandProperties(annotationProperties: AnnotationProperties): CommandProperties; 15 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@actions/core/lib/utils.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";AAAA,mCAAmC;AACnC,uDAAuD;;;AAKvD;;;GAGG;AACH,SAAgB,cAAc,CAAC,KAAU;IACvC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;QACzC,OAAO,EAAE,CAAA;KACV;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,YAAY,MAAM,EAAE;QAC/D,OAAO,KAAe,CAAA;KACvB;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;AAC9B,CAAC;AAPD,wCAOC;AAED;;;;;GAKG;AACH,SAAgB,mBAAmB,CACjC,oBAA0C;IAE1C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,MAAM,EAAE;QAC7C,OAAO,EAAE,CAAA;KACV;IAED,OAAO;QACL,KAAK,EAAE,oBAAoB,CAAC,KAAK;QACjC,IAAI,EAAE,oBAAoB,CAAC,IAAI;QAC/B,IAAI,EAAE,oBAAoB,CAAC,SAAS;QACpC,OAAO,EAAE,oBAAoB,CAAC,OAAO;QACrC,GAAG,EAAE,oBAAoB,CAAC,WAAW;QACrC,SAAS,EAAE,oBAAoB,CAAC,SAAS;KAC1C,CAAA;AACH,CAAC;AAfD,kDAeC"} -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@actions/exec/lib/interfaces.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | //# sourceMappingURL=interfaces.js.map -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@actions/exec/lib/interfaces.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":""} -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@actions/github/lib/github.d.ts: -------------------------------------------------------------------------------- 1 | import * as Context from './context'; 2 | import { GitHub } from './utils'; 3 | import { OctokitOptions } from '@octokit/core/dist-types/types'; 4 | export declare const context: Context.Context; 5 | /** 6 | * Returns a hydrated octokit ready to use for GitHub Actions 7 | * 8 | * @param token the repo PAT or GITHUB_TOKEN 9 | * @param options other options to set 10 | */ 11 | export declare function getOctokit(token: string, options?: OctokitOptions): InstanceType; 12 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@actions/github/lib/github.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"github.js","sourceRoot":"","sources":["../src/github.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,mDAAoC;AACpC,mCAAiD;AAKpC,QAAA,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,CAAA;AAE5C;;;;;GAKG;AACH,SAAgB,UAAU,CACxB,KAAa,EACb,OAAwB;IAExB,OAAO,IAAI,cAAM,CAAC,yBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAA;AACtD,CAAC;AALD,gCAKC"} -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@actions/github/lib/interfaces.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | /* eslint-disable @typescript-eslint/no-explicit-any */ 3 | Object.defineProperty(exports, "__esModule", { value: true }); 4 | //# sourceMappingURL=interfaces.js.map -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@actions/github/lib/interfaces.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":";AAAA,uDAAuD"} -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@actions/github/lib/internal/utils.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | import * as http from 'http'; 3 | import { OctokitOptions } from '@octokit/core/dist-types/types'; 4 | export declare function getAuthString(token: string, options: OctokitOptions): string | undefined; 5 | export declare function getProxyAgent(destinationUrl: string): http.Agent; 6 | export declare function getApiBaseUrl(): string; 7 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@actions/github/lib/internal/utils.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/internal/utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AACA,iEAAkD;AAGlD,SAAgB,aAAa,CAC3B,KAAa,EACb,OAAuB;IAEvB,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;QAC3B,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;KAC5D;SAAM,IAAI,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE;QAChC,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;KAC5E;IAED,OAAO,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,KAAK,EAAE,CAAA;AAC3E,CAAC;AAXD,sCAWC;AAED,SAAgB,aAAa,CAAC,cAAsB;IAClD,MAAM,EAAE,GAAG,IAAI,UAAU,CAAC,UAAU,EAAE,CAAA;IACtC,OAAO,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAA;AACpC,CAAC;AAHD,sCAGC;AAED,SAAgB,aAAa;IAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,wBAAwB,CAAA;AAClE,CAAC;AAFD,sCAEC"} -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@actions/http-client/lib/interfaces.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | //# sourceMappingURL=interfaces.js.map -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@actions/http-client/lib/interfaces.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":""} -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@actions/http-client/lib/proxy.d.ts: -------------------------------------------------------------------------------- 1 | export declare function getProxyUrl(reqUrl: URL): URL | undefined; 2 | export declare function checkBypass(reqUrl: URL): boolean; 3 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/auth-token/dist-src/auth.js: -------------------------------------------------------------------------------- 1 | const REGEX_IS_INSTALLATION_LEGACY = /^v1\./; 2 | const REGEX_IS_INSTALLATION = /^ghs_/; 3 | const REGEX_IS_USER_TO_SERVER = /^ghu_/; 4 | export async function auth(token) { 5 | const isApp = token.split(/\./).length === 3; 6 | const isInstallation = REGEX_IS_INSTALLATION_LEGACY.test(token) || 7 | REGEX_IS_INSTALLATION.test(token); 8 | const isUserToServer = REGEX_IS_USER_TO_SERVER.test(token); 9 | const tokenType = isApp 10 | ? "app" 11 | : isInstallation 12 | ? "installation" 13 | : isUserToServer 14 | ? "user-to-server" 15 | : "oauth"; 16 | return { 17 | type: "token", 18 | token: token, 19 | tokenType, 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/auth-token/dist-src/hook.js: -------------------------------------------------------------------------------- 1 | import { withAuthorizationPrefix } from "./with-authorization-prefix"; 2 | export async function hook(token, request, route, parameters) { 3 | const endpoint = request.endpoint.merge(route, parameters); 4 | endpoint.headers.authorization = withAuthorizationPrefix(token); 5 | return request(endpoint); 6 | } 7 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/auth-token/dist-src/index.js: -------------------------------------------------------------------------------- 1 | import { auth } from "./auth"; 2 | import { hook } from "./hook"; 3 | export const createTokenAuth = function createTokenAuth(token) { 4 | if (!token) { 5 | throw new Error("[@octokit/auth-token] No token passed to createTokenAuth"); 6 | } 7 | if (typeof token !== "string") { 8 | throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string"); 9 | } 10 | token = token.replace(/^(token|bearer) +/i, ""); 11 | return Object.assign(auth.bind(null, token), { 12 | hook: hook.bind(null, token), 13 | }); 14 | }; 15 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/auth-token/dist-src/types.js: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/auth-token/dist-src/with-authorization-prefix.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Prefix token for usage in the Authorization header 3 | * 4 | * @param token OAuth token or JSON Web Token 5 | */ 6 | export function withAuthorizationPrefix(token) { 7 | if (token.split(/\./).length === 3) { 8 | return `bearer ${token}`; 9 | } 10 | return `token ${token}`; 11 | } 12 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/auth-token/dist-types/auth.d.ts: -------------------------------------------------------------------------------- 1 | import { Token, Authentication } from "./types"; 2 | export declare function auth(token: Token): Promise; 3 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/auth-token/dist-types/hook.d.ts: -------------------------------------------------------------------------------- 1 | import { AnyResponse, EndpointOptions, RequestInterface, RequestParameters, Route, Token } from "./types"; 2 | export declare function hook(token: Token, request: RequestInterface, route: Route | EndpointOptions, parameters?: RequestParameters): Promise; 3 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/auth-token/dist-types/index.d.ts: -------------------------------------------------------------------------------- 1 | import { StrategyInterface, Token, Authentication } from "./types"; 2 | export declare type Types = { 3 | StrategyOptions: Token; 4 | AuthOptions: never; 5 | Authentication: Authentication; 6 | }; 7 | export declare const createTokenAuth: StrategyInterface; 8 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/auth-token/dist-types/with-authorization-prefix.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Prefix token for usage in the Authorization header 3 | * 4 | * @param token OAuth token or JSON Web Token 5 | */ 6 | export declare function withAuthorizationPrefix(token: string): string; 7 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/core/dist-src/types.js: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/core/dist-src/version.js: -------------------------------------------------------------------------------- 1 | export const VERSION = "3.6.0"; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/core/dist-types/version.d.ts: -------------------------------------------------------------------------------- 1 | export declare const VERSION = "3.6.0"; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/endpoint/dist-src/defaults.js: -------------------------------------------------------------------------------- 1 | import { getUserAgent } from "universal-user-agent"; 2 | import { VERSION } from "./version"; 3 | const userAgent = `octokit-endpoint.js/${VERSION} ${getUserAgent()}`; 4 | // DEFAULTS has all properties set that EndpointOptions has, except url. 5 | // So we use RequestParameters and add method as additional required property. 6 | export const DEFAULTS = { 7 | method: "GET", 8 | baseUrl: "https://api.github.com", 9 | headers: { 10 | accept: "application/vnd.github.v3+json", 11 | "user-agent": userAgent, 12 | }, 13 | mediaType: { 14 | format: "", 15 | previews: [], 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/endpoint/dist-src/endpoint-with-defaults.js: -------------------------------------------------------------------------------- 1 | import { merge } from "./merge"; 2 | import { parse } from "./parse"; 3 | export function endpointWithDefaults(defaults, route, options) { 4 | return parse(merge(defaults, route, options)); 5 | } 6 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/endpoint/dist-src/index.js: -------------------------------------------------------------------------------- 1 | import { withDefaults } from "./with-defaults"; 2 | import { DEFAULTS } from "./defaults"; 3 | export const endpoint = withDefaults(null, DEFAULTS); 4 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/endpoint/dist-src/util/add-query-parameters.js: -------------------------------------------------------------------------------- 1 | export function addQueryParameters(url, parameters) { 2 | const separator = /\?/.test(url) ? "&" : "?"; 3 | const names = Object.keys(parameters); 4 | if (names.length === 0) { 5 | return url; 6 | } 7 | return (url + 8 | separator + 9 | names 10 | .map((name) => { 11 | if (name === "q") { 12 | return ("q=" + parameters.q.split("+").map(encodeURIComponent).join("+")); 13 | } 14 | return `${name}=${encodeURIComponent(parameters[name])}`; 15 | }) 16 | .join("&")); 17 | } 18 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/endpoint/dist-src/util/extract-url-variable-names.js: -------------------------------------------------------------------------------- 1 | const urlVariableRegex = /\{[^}]+\}/g; 2 | function removeNonChars(variableName) { 3 | return variableName.replace(/^\W+|\W+$/g, "").split(/,/); 4 | } 5 | export function extractUrlVariableNames(url) { 6 | const matches = url.match(urlVariableRegex); 7 | if (!matches) { 8 | return []; 9 | } 10 | return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []); 11 | } 12 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/endpoint/dist-src/util/lowercase-keys.js: -------------------------------------------------------------------------------- 1 | export function lowercaseKeys(object) { 2 | if (!object) { 3 | return {}; 4 | } 5 | return Object.keys(object).reduce((newObj, key) => { 6 | newObj[key.toLowerCase()] = object[key]; 7 | return newObj; 8 | }, {}); 9 | } 10 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/endpoint/dist-src/util/merge-deep.js: -------------------------------------------------------------------------------- 1 | import { isPlainObject } from "is-plain-object"; 2 | export function mergeDeep(defaults, options) { 3 | const result = Object.assign({}, defaults); 4 | Object.keys(options).forEach((key) => { 5 | if (isPlainObject(options[key])) { 6 | if (!(key in defaults)) 7 | Object.assign(result, { [key]: options[key] }); 8 | else 9 | result[key] = mergeDeep(defaults[key], options[key]); 10 | } 11 | else { 12 | Object.assign(result, { [key]: options[key] }); 13 | } 14 | }); 15 | return result; 16 | } 17 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/endpoint/dist-src/util/omit.js: -------------------------------------------------------------------------------- 1 | export function omit(object, keysToOmit) { 2 | return Object.keys(object) 3 | .filter((option) => !keysToOmit.includes(option)) 4 | .reduce((obj, key) => { 5 | obj[key] = object[key]; 6 | return obj; 7 | }, {}); 8 | } 9 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/endpoint/dist-src/util/remove-undefined-properties.js: -------------------------------------------------------------------------------- 1 | export function removeUndefinedProperties(obj) { 2 | for (const key in obj) { 3 | if (obj[key] === undefined) { 4 | delete obj[key]; 5 | } 6 | } 7 | return obj; 8 | } 9 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/endpoint/dist-src/version.js: -------------------------------------------------------------------------------- 1 | export const VERSION = "6.0.12"; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/endpoint/dist-src/with-defaults.js: -------------------------------------------------------------------------------- 1 | import { endpointWithDefaults } from "./endpoint-with-defaults"; 2 | import { merge } from "./merge"; 3 | import { parse } from "./parse"; 4 | export function withDefaults(oldDefaults, newDefaults) { 5 | const DEFAULTS = merge(oldDefaults, newDefaults); 6 | const endpoint = endpointWithDefaults.bind(null, DEFAULTS); 7 | return Object.assign(endpoint, { 8 | DEFAULTS, 9 | defaults: withDefaults.bind(null, DEFAULTS), 10 | merge: merge.bind(null, DEFAULTS), 11 | parse, 12 | }); 13 | } 14 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/endpoint/dist-types/defaults.d.ts: -------------------------------------------------------------------------------- 1 | import { EndpointDefaults } from "@octokit/types"; 2 | export declare const DEFAULTS: EndpointDefaults; 3 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/endpoint/dist-types/endpoint-with-defaults.d.ts: -------------------------------------------------------------------------------- 1 | import { EndpointOptions, RequestParameters, Route } from "@octokit/types"; 2 | import { DEFAULTS } from "./defaults"; 3 | export declare function endpointWithDefaults(defaults: typeof DEFAULTS, route: Route | EndpointOptions, options?: RequestParameters): import("@octokit/types").RequestOptions; 4 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/endpoint/dist-types/index.d.ts: -------------------------------------------------------------------------------- 1 | export declare const endpoint: import("@octokit/types").EndpointInterface; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/endpoint/dist-types/merge.d.ts: -------------------------------------------------------------------------------- 1 | import { EndpointDefaults, RequestParameters, Route } from "@octokit/types"; 2 | export declare function merge(defaults: EndpointDefaults | null, route?: Route | RequestParameters, options?: RequestParameters): EndpointDefaults; 3 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/endpoint/dist-types/parse.d.ts: -------------------------------------------------------------------------------- 1 | import { EndpointDefaults, RequestOptions } from "@octokit/types"; 2 | export declare function parse(options: EndpointDefaults): RequestOptions; 3 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/endpoint/dist-types/util/add-query-parameters.d.ts: -------------------------------------------------------------------------------- 1 | export declare function addQueryParameters(url: string, parameters: { 2 | [x: string]: string | undefined; 3 | q?: string; 4 | }): string; 5 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/endpoint/dist-types/util/extract-url-variable-names.d.ts: -------------------------------------------------------------------------------- 1 | export declare function extractUrlVariableNames(url: string): string[]; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/endpoint/dist-types/util/lowercase-keys.d.ts: -------------------------------------------------------------------------------- 1 | export declare function lowercaseKeys(object?: { 2 | [key: string]: any; 3 | }): { 4 | [key: string]: any; 5 | }; 6 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/endpoint/dist-types/util/merge-deep.d.ts: -------------------------------------------------------------------------------- 1 | export declare function mergeDeep(defaults: any, options: any): object; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/endpoint/dist-types/util/omit.d.ts: -------------------------------------------------------------------------------- 1 | export declare function omit(object: { 2 | [key: string]: any; 3 | }, keysToOmit: string[]): { 4 | [key: string]: any; 5 | }; 6 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/endpoint/dist-types/util/remove-undefined-properties.d.ts: -------------------------------------------------------------------------------- 1 | export declare function removeUndefinedProperties(obj: any): any; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/endpoint/dist-types/util/url-template.d.ts: -------------------------------------------------------------------------------- 1 | export declare function parseUrl(template: string): { 2 | expand: (context: object) => string; 3 | }; 4 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/endpoint/dist-types/version.d.ts: -------------------------------------------------------------------------------- 1 | export declare const VERSION = "6.0.12"; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/endpoint/dist-types/with-defaults.d.ts: -------------------------------------------------------------------------------- 1 | import { EndpointInterface, RequestParameters, EndpointDefaults } from "@octokit/types"; 2 | export declare function withDefaults(oldDefaults: EndpointDefaults | null, newDefaults: RequestParameters): EndpointInterface; 3 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/graphql/dist-src/index.js: -------------------------------------------------------------------------------- 1 | import { request } from "@octokit/request"; 2 | import { getUserAgent } from "universal-user-agent"; 3 | import { VERSION } from "./version"; 4 | import { withDefaults } from "./with-defaults"; 5 | export const graphql = withDefaults(request, { 6 | headers: { 7 | "user-agent": `octokit-graphql.js/${VERSION} ${getUserAgent()}`, 8 | }, 9 | method: "POST", 10 | url: "/graphql", 11 | }); 12 | export { GraphqlResponseError } from "./error"; 13 | export function withCustomRequest(customRequest) { 14 | return withDefaults(customRequest, { 15 | method: "POST", 16 | url: "/graphql", 17 | }); 18 | } 19 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/graphql/dist-src/types.js: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/graphql/dist-src/version.js: -------------------------------------------------------------------------------- 1 | export const VERSION = "4.8.0"; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/graphql/dist-src/with-defaults.js: -------------------------------------------------------------------------------- 1 | import { request as Request } from "@octokit/request"; 2 | import { graphql } from "./graphql"; 3 | export function withDefaults(request, newDefaults) { 4 | const newRequest = request.defaults(newDefaults); 5 | const newApi = (query, options) => { 6 | return graphql(newRequest, query, options); 7 | }; 8 | return Object.assign(newApi, { 9 | defaults: withDefaults.bind(null, newRequest), 10 | endpoint: Request.endpoint, 11 | }); 12 | } 13 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/graphql/dist-types/error.d.ts: -------------------------------------------------------------------------------- 1 | import { ResponseHeaders } from "@octokit/types"; 2 | import { GraphQlEndpointOptions, GraphQlQueryResponse } from "./types"; 3 | declare type ServerResponseData = Required>; 4 | export declare class GraphqlResponseError extends Error { 5 | readonly request: GraphQlEndpointOptions; 6 | readonly headers: ResponseHeaders; 7 | readonly response: ServerResponseData; 8 | name: string; 9 | readonly errors: GraphQlQueryResponse["errors"]; 10 | readonly data: ResponseData; 11 | constructor(request: GraphQlEndpointOptions, headers: ResponseHeaders, response: ServerResponseData); 12 | } 13 | export {}; 14 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/graphql/dist-types/graphql.d.ts: -------------------------------------------------------------------------------- 1 | import { request as Request } from "@octokit/request"; 2 | import { RequestParameters, GraphQlQueryResponseData } from "./types"; 3 | export declare function graphql(request: typeof Request, query: string | RequestParameters, options?: RequestParameters): Promise; 4 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/graphql/dist-types/index.d.ts: -------------------------------------------------------------------------------- 1 | import { request } from "@octokit/request"; 2 | export declare const graphql: import("./types").graphql; 3 | export { GraphQlQueryResponseData } from "./types"; 4 | export { GraphqlResponseError } from "./error"; 5 | export declare function withCustomRequest(customRequest: typeof request): import("./types").graphql; 6 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/graphql/dist-types/version.d.ts: -------------------------------------------------------------------------------- 1 | export declare const VERSION = "4.8.0"; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/graphql/dist-types/with-defaults.d.ts: -------------------------------------------------------------------------------- 1 | import { request as Request } from "@octokit/request"; 2 | import { graphql as ApiInterface, RequestParameters } from "./types"; 3 | export declare function withDefaults(request: typeof Request, newDefaults: RequestParameters): ApiInterface; 4 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/openapi-types/README.md: -------------------------------------------------------------------------------- 1 | # @octokit/openapi-types 2 | 3 | > Generated TypeScript definitions based on GitHub's OpenAPI spec 4 | 5 | This package is continously updated based on [GitHub's OpenAPI specification](https://github.com/github/rest-api-description/) 6 | 7 | ## Usage 8 | 9 | ```ts 10 | import { components } from "@octokit/openapi-types"; 11 | 12 | type Repository = components["schemas"]["full-repository"]; 13 | ``` 14 | 15 | ## License 16 | 17 | [MIT](LICENSE) 18 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/openapi-types/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@octokit/openapi-types", 3 | "description": "Generated TypeScript definitions based on GitHub's OpenAPI spec for api.github.com", 4 | "repository": { 5 | "type": "git", 6 | "url": "https://github.com/octokit/openapi-types.ts.git", 7 | "directory": "packages/openapi-types" 8 | }, 9 | "publishConfig": { 10 | "access": "public" 11 | }, 12 | "version": "12.11.0", 13 | "main": "", 14 | "types": "types.d.ts", 15 | "author": "Gregor Martynus (https://twitter.com/gr2m)", 16 | "license": "MIT", 17 | "octokit": { 18 | "openapi-version": "6.8.0" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/plugin-paginate-rest/dist-src/compose-paginate.js: -------------------------------------------------------------------------------- 1 | import { paginate } from "./paginate"; 2 | import { iterator } from "./iterator"; 3 | export const composePaginateRest = Object.assign(paginate, { 4 | iterator, 5 | }); 6 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/plugin-paginate-rest/dist-src/index.js: -------------------------------------------------------------------------------- 1 | import { VERSION } from "./version"; 2 | import { paginate } from "./paginate"; 3 | import { iterator } from "./iterator"; 4 | export { composePaginateRest } from "./compose-paginate"; 5 | export { isPaginatingEndpoint, paginatingEndpoints, } from "./paginating-endpoints"; 6 | /** 7 | * @param octokit Octokit instance 8 | * @param options Options passed to Octokit constructor 9 | */ 10 | export function paginateRest(octokit) { 11 | return { 12 | paginate: Object.assign(paginate.bind(null, octokit), { 13 | iterator: iterator.bind(null, octokit), 14 | }), 15 | }; 16 | } 17 | paginateRest.VERSION = VERSION; 18 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/plugin-paginate-rest/dist-src/paginating-endpoints.js: -------------------------------------------------------------------------------- 1 | import { paginatingEndpoints, } from "./generated/paginating-endpoints"; 2 | export { paginatingEndpoints } from "./generated/paginating-endpoints"; 3 | export function isPaginatingEndpoint(arg) { 4 | if (typeof arg === "string") { 5 | return paginatingEndpoints.includes(arg); 6 | } 7 | else { 8 | return false; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/plugin-paginate-rest/dist-src/types.js: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/plugin-paginate-rest/dist-src/version.js: -------------------------------------------------------------------------------- 1 | export const VERSION = "2.21.3"; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/plugin-paginate-rest/dist-types/compose-paginate.d.ts: -------------------------------------------------------------------------------- 1 | import { ComposePaginateInterface } from "./types"; 2 | export declare const composePaginateRest: ComposePaginateInterface; 3 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/plugin-paginate-rest/dist-types/index.d.ts: -------------------------------------------------------------------------------- 1 | import { Octokit } from "@octokit/core"; 2 | import { PaginateInterface } from "./types"; 3 | export { PaginateInterface } from "./types"; 4 | export { PaginatingEndpoints } from "./types"; 5 | export { composePaginateRest } from "./compose-paginate"; 6 | export { isPaginatingEndpoint, paginatingEndpoints, } from "./paginating-endpoints"; 7 | /** 8 | * @param octokit Octokit instance 9 | * @param options Options passed to Octokit constructor 10 | */ 11 | export declare function paginateRest(octokit: Octokit): { 12 | paginate: PaginateInterface; 13 | }; 14 | export declare namespace paginateRest { 15 | var VERSION: string; 16 | } 17 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/plugin-paginate-rest/dist-types/paginate.d.ts: -------------------------------------------------------------------------------- 1 | import { Octokit } from "@octokit/core"; 2 | import { MapFunction, PaginationResults, RequestParameters, Route, RequestInterface } from "./types"; 3 | export declare function paginate(octokit: Octokit, route: Route | RequestInterface, parameters?: RequestParameters, mapFn?: MapFunction): Promise>; 4 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/plugin-paginate-rest/dist-types/paginating-endpoints.d.ts: -------------------------------------------------------------------------------- 1 | import { PaginatingEndpoints } from "./generated/paginating-endpoints"; 2 | export { paginatingEndpoints } from "./generated/paginating-endpoints"; 3 | export declare function isPaginatingEndpoint(arg: unknown): arg is keyof PaginatingEndpoints; 4 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/plugin-paginate-rest/dist-types/version.d.ts: -------------------------------------------------------------------------------- 1 | export declare const VERSION = "2.21.3"; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/plugin-rest-endpoint-methods/dist-src/generated/method-types.js: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/plugin-rest-endpoint-methods/dist-src/generated/parameters-and-response-types.js: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/plugin-rest-endpoint-methods/dist-src/index.js: -------------------------------------------------------------------------------- 1 | import ENDPOINTS from "./generated/endpoints"; 2 | import { VERSION } from "./version"; 3 | import { endpointsToMethods } from "./endpoints-to-methods"; 4 | export function restEndpointMethods(octokit) { 5 | const api = endpointsToMethods(octokit, ENDPOINTS); 6 | return { 7 | rest: api, 8 | }; 9 | } 10 | restEndpointMethods.VERSION = VERSION; 11 | export function legacyRestEndpointMethods(octokit) { 12 | const api = endpointsToMethods(octokit, ENDPOINTS); 13 | return { 14 | ...api, 15 | rest: api, 16 | }; 17 | } 18 | legacyRestEndpointMethods.VERSION = VERSION; 19 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/plugin-rest-endpoint-methods/dist-src/types.js: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/plugin-rest-endpoint-methods/dist-src/version.js: -------------------------------------------------------------------------------- 1 | export const VERSION = "5.16.2"; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/plugin-rest-endpoint-methods/dist-types/endpoints-to-methods.d.ts: -------------------------------------------------------------------------------- 1 | import { Octokit } from "@octokit/core"; 2 | import { EndpointsDefaultsAndDecorations } from "./types"; 3 | import { RestEndpointMethods } from "./generated/method-types"; 4 | export declare function endpointsToMethods(octokit: Octokit, endpointsMap: EndpointsDefaultsAndDecorations): RestEndpointMethods; 5 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/plugin-rest-endpoint-methods/dist-types/generated/endpoints.d.ts: -------------------------------------------------------------------------------- 1 | import { EndpointsDefaultsAndDecorations } from "../types"; 2 | declare const Endpoints: EndpointsDefaultsAndDecorations; 3 | export default Endpoints; 4 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/plugin-rest-endpoint-methods/dist-types/index.d.ts: -------------------------------------------------------------------------------- 1 | import { Octokit } from "@octokit/core"; 2 | export { RestEndpointMethodTypes } from "./generated/parameters-and-response-types"; 3 | import { Api } from "./types"; 4 | export declare function restEndpointMethods(octokit: Octokit): Api; 5 | export declare namespace restEndpointMethods { 6 | var VERSION: string; 7 | } 8 | export declare function legacyRestEndpointMethods(octokit: Octokit): Api["rest"] & Api; 9 | export declare namespace legacyRestEndpointMethods { 10 | var VERSION: string; 11 | } 12 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/plugin-rest-endpoint-methods/dist-types/types.d.ts: -------------------------------------------------------------------------------- 1 | import { Route, RequestParameters } from "@octokit/types"; 2 | import { RestEndpointMethods } from "./generated/method-types"; 3 | export declare type Api = { 4 | rest: RestEndpointMethods; 5 | }; 6 | export declare type EndpointDecorations = { 7 | mapToData?: string; 8 | deprecated?: string; 9 | renamed?: [string, string]; 10 | renamedParameters?: { 11 | [name: string]: string; 12 | }; 13 | }; 14 | export declare type EndpointsDefaultsAndDecorations = { 15 | [scope: string]: { 16 | [methodName: string]: [Route, RequestParameters?, EndpointDecorations?]; 17 | }; 18 | }; 19 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/plugin-rest-endpoint-methods/dist-types/version.d.ts: -------------------------------------------------------------------------------- 1 | export declare const VERSION = "5.16.2"; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/request-error/dist-src/types.js: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/request-error/dist-types/types.d.ts: -------------------------------------------------------------------------------- 1 | import { RequestOptions, ResponseHeaders, OctokitResponse } from "@octokit/types"; 2 | export declare type RequestErrorOptions = { 3 | /** @deprecated set `response` instead */ 4 | headers?: ResponseHeaders; 5 | request: RequestOptions; 6 | } | { 7 | response: OctokitResponse; 8 | request: RequestOptions; 9 | }; 10 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/request/dist-src/get-buffer-response.js: -------------------------------------------------------------------------------- 1 | export default function getBufferResponse(response) { 2 | return response.arrayBuffer(); 3 | } 4 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/request/dist-src/index.js: -------------------------------------------------------------------------------- 1 | import { endpoint } from "@octokit/endpoint"; 2 | import { getUserAgent } from "universal-user-agent"; 3 | import { VERSION } from "./version"; 4 | import withDefaults from "./with-defaults"; 5 | export const request = withDefaults(endpoint, { 6 | headers: { 7 | "user-agent": `octokit-request.js/${VERSION} ${getUserAgent()}`, 8 | }, 9 | }); 10 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/request/dist-src/version.js: -------------------------------------------------------------------------------- 1 | export const VERSION = "5.6.3"; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/request/dist-types/fetch-wrapper.d.ts: -------------------------------------------------------------------------------- 1 | import { EndpointInterface } from "@octokit/types"; 2 | export default function fetchWrapper(requestOptions: ReturnType & { 3 | redirect?: "error" | "follow" | "manual"; 4 | }): Promise<{ 5 | status: number; 6 | url: string; 7 | headers: { 8 | [header: string]: string; 9 | }; 10 | data: any; 11 | }>; 12 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/request/dist-types/get-buffer-response.d.ts: -------------------------------------------------------------------------------- 1 | import { Response } from "node-fetch"; 2 | export default function getBufferResponse(response: Response): Promise; 3 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/request/dist-types/index.d.ts: -------------------------------------------------------------------------------- 1 | export declare const request: import("@octokit/types").RequestInterface; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/request/dist-types/version.d.ts: -------------------------------------------------------------------------------- 1 | export declare const VERSION = "5.6.3"; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/request/dist-types/with-defaults.d.ts: -------------------------------------------------------------------------------- 1 | import { EndpointInterface, RequestInterface, RequestParameters } from "@octokit/types"; 2 | export default function withDefaults(oldEndpoint: EndpointInterface, newDefaults: RequestParameters): RequestInterface; 3 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-node/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | Object.defineProperty(exports, '__esModule', { value: true }); 4 | 5 | const VERSION = "6.41.0"; 6 | 7 | exports.VERSION = VERSION; 8 | //# sourceMappingURL=index.js.map 9 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-node/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sources":["../dist-src/VERSION.js"],"sourcesContent":["export const VERSION = \"0.0.0-development\";\n"],"names":["VERSION"],"mappings":";;;;MAAaA,OAAO,GAAG;;;;"} -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-src/AuthInterface.js: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-src/EndpointDefaults.js: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-src/EndpointInterface.js: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-src/EndpointOptions.js: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-src/Fetch.js: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-src/GetResponseTypeFromEndpointMethod.js: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-src/OctokitResponse.js: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-src/RequestError.js: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-src/RequestHeaders.js: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-src/RequestInterface.js: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-src/RequestMethod.js: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-src/RequestOptions.js: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-src/RequestParameters.js: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-src/RequestRequestOptions.js: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-src/ResponseHeaders.js: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-src/Route.js: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-src/Signal.js: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-src/StrategyInterface.js: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-src/Url.js: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-src/VERSION.js: -------------------------------------------------------------------------------- 1 | export const VERSION = "6.41.0"; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-src/generated/Endpoints.js: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-types/EndpointDefaults.d.ts: -------------------------------------------------------------------------------- 1 | import { RequestHeaders } from "./RequestHeaders"; 2 | import { RequestMethod } from "./RequestMethod"; 3 | import { RequestParameters } from "./RequestParameters"; 4 | import { Url } from "./Url"; 5 | /** 6 | * The `.endpoint()` method is guaranteed to set all keys defined by RequestParameters 7 | * as well as the method property. 8 | */ 9 | export declare type EndpointDefaults = RequestParameters & { 10 | baseUrl: Url; 11 | method: RequestMethod; 12 | url?: Url; 13 | headers: RequestHeaders & { 14 | accept: string; 15 | "user-agent": string; 16 | }; 17 | mediaType: { 18 | format: string; 19 | previews: string[]; 20 | }; 21 | }; 22 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-types/EndpointOptions.d.ts: -------------------------------------------------------------------------------- 1 | import { RequestMethod } from "./RequestMethod"; 2 | import { Url } from "./Url"; 3 | import { RequestParameters } from "./RequestParameters"; 4 | export declare type EndpointOptions = RequestParameters & { 5 | method: RequestMethod; 6 | url: Url; 7 | }; 8 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-types/Fetch.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Browser's fetch method (or compatible such as fetch-mock) 3 | */ 4 | export declare type Fetch = any; 5 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-types/GetResponseTypeFromEndpointMethod.d.ts: -------------------------------------------------------------------------------- 1 | declare type Unwrap = T extends Promise ? U : T; 2 | declare type AnyFunction = (...args: any[]) => any; 3 | export declare type GetResponseTypeFromEndpointMethod = Unwrap>; 4 | export declare type GetResponseDataTypeFromEndpointMethod = Unwrap>["data"]; 5 | export {}; 6 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-types/OctokitResponse.d.ts: -------------------------------------------------------------------------------- 1 | import { ResponseHeaders } from "./ResponseHeaders"; 2 | import { Url } from "./Url"; 3 | export declare type OctokitResponse = { 4 | headers: ResponseHeaders; 5 | /** 6 | * http response code 7 | */ 8 | status: S; 9 | /** 10 | * URL of response after all redirects 11 | */ 12 | url: Url; 13 | /** 14 | * Response data as documented in the REST API reference documentation at https://docs.github.com/rest/reference 15 | */ 16 | data: T; 17 | }; 18 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-types/RequestError.d.ts: -------------------------------------------------------------------------------- 1 | export declare type RequestError = { 2 | name: string; 3 | status: number; 4 | documentation_url: string; 5 | errors?: Array<{ 6 | resource: string; 7 | code: string; 8 | field: string; 9 | message?: string; 10 | }>; 11 | }; 12 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-types/RequestHeaders.d.ts: -------------------------------------------------------------------------------- 1 | export declare type RequestHeaders = { 2 | /** 3 | * Avoid setting `headers.accept`, use `mediaType.{format|previews}` option instead. 4 | */ 5 | accept?: string; 6 | /** 7 | * Use `authorization` to send authenticated request, remember `token ` / `bearer ` prefixes. Example: `token 1234567890abcdef1234567890abcdef12345678` 8 | */ 9 | authorization?: string; 10 | /** 11 | * `user-agent` is set do a default and can be overwritten as needed. 12 | */ 13 | "user-agent"?: string; 14 | [header: string]: string | number | undefined; 15 | }; 16 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-types/RequestMethod.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * HTTP Verb supported by GitHub's REST API 3 | */ 4 | export declare type RequestMethod = "DELETE" | "GET" | "HEAD" | "PATCH" | "POST" | "PUT"; 5 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-types/RequestOptions.d.ts: -------------------------------------------------------------------------------- 1 | import { RequestHeaders } from "./RequestHeaders"; 2 | import { RequestMethod } from "./RequestMethod"; 3 | import { RequestRequestOptions } from "./RequestRequestOptions"; 4 | import { Url } from "./Url"; 5 | /** 6 | * Generic request options as they are returned by the `endpoint()` method 7 | */ 8 | export declare type RequestOptions = { 9 | method: RequestMethod; 10 | url: Url; 11 | headers: RequestHeaders; 12 | body?: any; 13 | request?: RequestRequestOptions; 14 | }; 15 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-types/ResponseHeaders.d.ts: -------------------------------------------------------------------------------- 1 | export declare type ResponseHeaders = { 2 | "cache-control"?: string; 3 | "content-length"?: number; 4 | "content-type"?: string; 5 | date?: string; 6 | etag?: string; 7 | "last-modified"?: string; 8 | link?: string; 9 | location?: string; 10 | server?: string; 11 | status?: string; 12 | vary?: string; 13 | "x-github-mediatype"?: string; 14 | "x-github-request-id"?: string; 15 | "x-oauth-scopes"?: string; 16 | "x-ratelimit-limit"?: string; 17 | "x-ratelimit-remaining"?: string; 18 | "x-ratelimit-reset"?: string; 19 | [header: string]: string | number | undefined; 20 | }; 21 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-types/Route.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * String consisting of an optional HTTP method and relative path or absolute URL. Examples: `'/orgs/{org}'`, `'PUT /orgs/{org}'`, `GET https://example.com/foo/bar` 3 | */ 4 | export declare type Route = string; 5 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-types/Signal.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Abort signal 3 | * 4 | * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal 5 | */ 6 | export declare type Signal = any; 7 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-types/StrategyInterface.d.ts: -------------------------------------------------------------------------------- 1 | import { AuthInterface } from "./AuthInterface"; 2 | export interface StrategyInterface { 3 | (...args: StrategyOptions): AuthInterface; 4 | } 5 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-types/Url.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Relative or absolute URL. Examples: `'/orgs/{org}'`, `https://example.com/foo/bar` 3 | */ 4 | export declare type Url = string; 5 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-types/VERSION.d.ts: -------------------------------------------------------------------------------- 1 | export declare const VERSION = "6.41.0"; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-web/index.js: -------------------------------------------------------------------------------- 1 | const VERSION = "6.41.0"; 2 | 3 | export { VERSION }; 4 | //# sourceMappingURL=index.js.map 5 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/@octokit/types/dist-web/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sources":["../dist-src/VERSION.js"],"sourcesContent":["export const VERSION = \"0.0.0-development\";\n"],"names":[],"mappings":"AAAY,MAAC,OAAO,GAAG;;;;"} -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/before-after-hook/lib/remove.js: -------------------------------------------------------------------------------- 1 | module.exports = removeHook; 2 | 3 | function removeHook(state, name, method) { 4 | if (!state.registry[name]) { 5 | return; 6 | } 7 | 8 | var index = state.registry[name] 9 | .map(function (registered) { 10 | return registered.orig; 11 | }) 12 | .indexOf(method); 13 | 14 | if (index === -1) { 15 | return; 16 | } 17 | 18 | state.registry[name].splice(index, 1); 19 | } 20 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/deprecation/dist-node/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | Object.defineProperty(exports, '__esModule', { value: true }); 4 | 5 | class Deprecation extends Error { 6 | constructor(message) { 7 | super(message); // Maintains proper stack trace (only available on V8) 8 | 9 | /* istanbul ignore next */ 10 | 11 | if (Error.captureStackTrace) { 12 | Error.captureStackTrace(this, this.constructor); 13 | } 14 | 15 | this.name = 'Deprecation'; 16 | } 17 | 18 | } 19 | 20 | exports.Deprecation = Deprecation; 21 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/deprecation/dist-src/index.js: -------------------------------------------------------------------------------- 1 | export class Deprecation extends Error { 2 | constructor(message) { 3 | super(message); // Maintains proper stack trace (only available on V8) 4 | 5 | /* istanbul ignore next */ 6 | 7 | if (Error.captureStackTrace) { 8 | Error.captureStackTrace(this, this.constructor); 9 | } 10 | 11 | this.name = 'Deprecation'; 12 | } 13 | 14 | } -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/deprecation/dist-types/index.d.ts: -------------------------------------------------------------------------------- 1 | export class Deprecation extends Error { 2 | name: "Deprecation"; 3 | } 4 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/deprecation/dist-web/index.js: -------------------------------------------------------------------------------- 1 | class Deprecation extends Error { 2 | constructor(message) { 3 | super(message); // Maintains proper stack trace (only available on V8) 4 | 5 | /* istanbul ignore next */ 6 | 7 | if (Error.captureStackTrace) { 8 | Error.captureStackTrace(this, this.constructor); 9 | } 10 | 11 | this.name = 'Deprecation'; 12 | } 13 | 14 | } 15 | 16 | export { Deprecation }; 17 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/is-plain-object/is-plain-object.d.ts: -------------------------------------------------------------------------------- 1 | export function isPlainObject(o: any): boolean; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/once/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "once", 3 | "version": "1.4.0", 4 | "description": "Run a function exactly one time", 5 | "main": "once.js", 6 | "directories": { 7 | "test": "test" 8 | }, 9 | "dependencies": { 10 | "wrappy": "1" 11 | }, 12 | "devDependencies": { 13 | "tap": "^7.0.1" 14 | }, 15 | "scripts": { 16 | "test": "tap test/*.js" 17 | }, 18 | "files": [ 19 | "once.js" 20 | ], 21 | "repository": { 22 | "type": "git", 23 | "url": "git://github.com/isaacs/once" 24 | }, 25 | "keywords": [ 26 | "once", 27 | "function", 28 | "one", 29 | "single" 30 | ], 31 | "author": "Isaac Z. Schlueter (http://blog.izs.me/)", 32 | "license": "ISC" 33 | } 34 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/tr46/.npmignore: -------------------------------------------------------------------------------- 1 | scripts/ 2 | test/ 3 | 4 | !lib/mapping_table.json 5 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/tr46/lib/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/academind/github-actions-course-resources/40301953af898062979c4a419ba470f5fa2a75f3/Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/tr46/lib/.gitkeep -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/tunnel/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "4" 4 | - "6" 5 | - "8" 6 | - "10" 7 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/tunnel/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | - 0.0.6 (2018/09/11) 4 | - Fix `localAddress` not working (#25) 5 | - Fix `Host:` header for CONNECT method by @tmurakam (#29, #30) 6 | - Fix default port for https (#32) 7 | - Fix error handling when the proxy send illegal response body (#33) 8 | 9 | - 0.0.5 (2017/06/12) 10 | - Fix socket leak. 11 | 12 | - 0.0.4 (2016/01/23) 13 | - supported Node v0.12 or later. 14 | 15 | - 0.0.3 (2014/01/20) 16 | - fixed package.json 17 | 18 | - 0.0.1 (2012/02/18) 19 | - supported Node v0.6.x (0.6.11 or later). 20 | 21 | - 0.0.0 (2012/02/11) 22 | - first release. 23 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/tunnel/index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./lib/tunnel'); 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/universal-user-agent/dist-node/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | Object.defineProperty(exports, '__esModule', { value: true }); 4 | 5 | function getUserAgent() { 6 | if (typeof navigator === "object" && "userAgent" in navigator) { 7 | return navigator.userAgent; 8 | } 9 | 10 | if (typeof process === "object" && "version" in process) { 11 | return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; 12 | } 13 | 14 | return ""; 15 | } 16 | 17 | exports.getUserAgent = getUserAgent; 18 | //# sourceMappingURL=index.js.map 19 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/universal-user-agent/dist-src/index.js: -------------------------------------------------------------------------------- 1 | export function getUserAgent() { 2 | if (typeof navigator === "object" && "userAgent" in navigator) { 3 | return navigator.userAgent; 4 | } 5 | if (typeof process === "object" && "version" in process) { 6 | return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; 7 | } 8 | return ""; 9 | } 10 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/universal-user-agent/dist-types/index.d.ts: -------------------------------------------------------------------------------- 1 | export declare function getUserAgent(): string; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/universal-user-agent/dist-web/index.js: -------------------------------------------------------------------------------- 1 | function getUserAgent() { 2 | if (typeof navigator === "object" && "userAgent" in navigator) { 3 | return navigator.userAgent; 4 | } 5 | if (typeof process === "object" && "version" in process) { 6 | return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; 7 | } 8 | return ""; 9 | } 10 | 11 | export { getUserAgent }; 12 | //# sourceMappingURL=index.js.map 13 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/uuid/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | Please feel free to file GitHub Issues or propose Pull Requests. We're always happy to discuss improvements to this library! 4 | 5 | ## Testing 6 | 7 | ```shell 8 | npm test 9 | ``` 10 | 11 | ## Releasing 12 | 13 | Releases are supposed to be done from master, version bumping is automated through [`standard-version`](https://github.com/conventional-changelog/standard-version): 14 | 15 | ```shell 16 | npm run release -- --dry-run # verify output manually 17 | npm run release # follow the instructions from the output of this command 18 | ``` 19 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/uuid/dist/bin/uuid: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | require('../uuid-bin'); 3 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/uuid/dist/esm-browser/index.js: -------------------------------------------------------------------------------- 1 | export { default as v1 } from './v1.js'; 2 | export { default as v3 } from './v3.js'; 3 | export { default as v4 } from './v4.js'; 4 | export { default as v5 } from './v5.js'; 5 | export { default as NIL } from './nil.js'; 6 | export { default as version } from './version.js'; 7 | export { default as validate } from './validate.js'; 8 | export { default as stringify } from './stringify.js'; 9 | export { default as parse } from './parse.js'; -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/uuid/dist/esm-browser/nil.js: -------------------------------------------------------------------------------- 1 | export default '00000000-0000-0000-0000-000000000000'; -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/uuid/dist/esm-browser/regex.js: -------------------------------------------------------------------------------- 1 | export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/uuid/dist/esm-browser/v3.js: -------------------------------------------------------------------------------- 1 | import v35 from './v35.js'; 2 | import md5 from './md5.js'; 3 | var v3 = v35('v3', 0x30, md5); 4 | export default v3; -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/uuid/dist/esm-browser/v4.js: -------------------------------------------------------------------------------- 1 | import rng from './rng.js'; 2 | import stringify from './stringify.js'; 3 | 4 | function v4(options, buf, offset) { 5 | options = options || {}; 6 | var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` 7 | 8 | rnds[6] = rnds[6] & 0x0f | 0x40; 9 | rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided 10 | 11 | if (buf) { 12 | offset = offset || 0; 13 | 14 | for (var i = 0; i < 16; ++i) { 15 | buf[offset + i] = rnds[i]; 16 | } 17 | 18 | return buf; 19 | } 20 | 21 | return stringify(rnds); 22 | } 23 | 24 | export default v4; -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/uuid/dist/esm-browser/v5.js: -------------------------------------------------------------------------------- 1 | import v35 from './v35.js'; 2 | import sha1 from './sha1.js'; 3 | var v5 = v35('v5', 0x50, sha1); 4 | export default v5; -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/uuid/dist/esm-browser/validate.js: -------------------------------------------------------------------------------- 1 | import REGEX from './regex.js'; 2 | 3 | function validate(uuid) { 4 | return typeof uuid === 'string' && REGEX.test(uuid); 5 | } 6 | 7 | export default validate; -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/uuid/dist/esm-browser/version.js: -------------------------------------------------------------------------------- 1 | import validate from './validate.js'; 2 | 3 | function version(uuid) { 4 | if (!validate(uuid)) { 5 | throw TypeError('Invalid UUID'); 6 | } 7 | 8 | return parseInt(uuid.substr(14, 1), 16); 9 | } 10 | 11 | export default version; -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/uuid/dist/esm-node/index.js: -------------------------------------------------------------------------------- 1 | export { default as v1 } from './v1.js'; 2 | export { default as v3 } from './v3.js'; 3 | export { default as v4 } from './v4.js'; 4 | export { default as v5 } from './v5.js'; 5 | export { default as NIL } from './nil.js'; 6 | export { default as version } from './version.js'; 7 | export { default as validate } from './validate.js'; 8 | export { default as stringify } from './stringify.js'; 9 | export { default as parse } from './parse.js'; -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/uuid/dist/esm-node/md5.js: -------------------------------------------------------------------------------- 1 | import crypto from 'crypto'; 2 | 3 | function md5(bytes) { 4 | if (Array.isArray(bytes)) { 5 | bytes = Buffer.from(bytes); 6 | } else if (typeof bytes === 'string') { 7 | bytes = Buffer.from(bytes, 'utf8'); 8 | } 9 | 10 | return crypto.createHash('md5').update(bytes).digest(); 11 | } 12 | 13 | export default md5; -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/uuid/dist/esm-node/nil.js: -------------------------------------------------------------------------------- 1 | export default '00000000-0000-0000-0000-000000000000'; -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/uuid/dist/esm-node/regex.js: -------------------------------------------------------------------------------- 1 | export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/uuid/dist/esm-node/rng.js: -------------------------------------------------------------------------------- 1 | import crypto from 'crypto'; 2 | const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate 3 | 4 | let poolPtr = rnds8Pool.length; 5 | export default function rng() { 6 | if (poolPtr > rnds8Pool.length - 16) { 7 | crypto.randomFillSync(rnds8Pool); 8 | poolPtr = 0; 9 | } 10 | 11 | return rnds8Pool.slice(poolPtr, poolPtr += 16); 12 | } -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/uuid/dist/esm-node/sha1.js: -------------------------------------------------------------------------------- 1 | import crypto from 'crypto'; 2 | 3 | function sha1(bytes) { 4 | if (Array.isArray(bytes)) { 5 | bytes = Buffer.from(bytes); 6 | } else if (typeof bytes === 'string') { 7 | bytes = Buffer.from(bytes, 'utf8'); 8 | } 9 | 10 | return crypto.createHash('sha1').update(bytes).digest(); 11 | } 12 | 13 | export default sha1; -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/uuid/dist/esm-node/v3.js: -------------------------------------------------------------------------------- 1 | import v35 from './v35.js'; 2 | import md5 from './md5.js'; 3 | const v3 = v35('v3', 0x30, md5); 4 | export default v3; -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/uuid/dist/esm-node/v4.js: -------------------------------------------------------------------------------- 1 | import rng from './rng.js'; 2 | import stringify from './stringify.js'; 3 | 4 | function v4(options, buf, offset) { 5 | options = options || {}; 6 | const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` 7 | 8 | rnds[6] = rnds[6] & 0x0f | 0x40; 9 | rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided 10 | 11 | if (buf) { 12 | offset = offset || 0; 13 | 14 | for (let i = 0; i < 16; ++i) { 15 | buf[offset + i] = rnds[i]; 16 | } 17 | 18 | return buf; 19 | } 20 | 21 | return stringify(rnds); 22 | } 23 | 24 | export default v4; -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/uuid/dist/esm-node/v5.js: -------------------------------------------------------------------------------- 1 | import v35 from './v35.js'; 2 | import sha1 from './sha1.js'; 3 | const v5 = v35('v5', 0x50, sha1); 4 | export default v5; -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/uuid/dist/esm-node/validate.js: -------------------------------------------------------------------------------- 1 | import REGEX from './regex.js'; 2 | 3 | function validate(uuid) { 4 | return typeof uuid === 'string' && REGEX.test(uuid); 5 | } 6 | 7 | export default validate; -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/uuid/dist/esm-node/version.js: -------------------------------------------------------------------------------- 1 | import validate from './validate.js'; 2 | 3 | function version(uuid) { 4 | if (!validate(uuid)) { 5 | throw TypeError('Invalid UUID'); 6 | } 7 | 8 | return parseInt(uuid.substr(14, 1), 16); 9 | } 10 | 11 | export default version; -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/uuid/dist/md5.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.default = void 0; 7 | 8 | var _crypto = _interopRequireDefault(require("crypto")); 9 | 10 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 11 | 12 | function md5(bytes) { 13 | if (Array.isArray(bytes)) { 14 | bytes = Buffer.from(bytes); 15 | } else if (typeof bytes === 'string') { 16 | bytes = Buffer.from(bytes, 'utf8'); 17 | } 18 | 19 | return _crypto.default.createHash('md5').update(bytes).digest(); 20 | } 21 | 22 | var _default = md5; 23 | exports.default = _default; -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/uuid/dist/nil.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.default = void 0; 7 | var _default = '00000000-0000-0000-0000-000000000000'; 8 | exports.default = _default; -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/uuid/dist/regex.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.default = void 0; 7 | var _default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; 8 | exports.default = _default; -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/uuid/dist/rng.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.default = rng; 7 | 8 | var _crypto = _interopRequireDefault(require("crypto")); 9 | 10 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 11 | 12 | const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate 13 | 14 | let poolPtr = rnds8Pool.length; 15 | 16 | function rng() { 17 | if (poolPtr > rnds8Pool.length - 16) { 18 | _crypto.default.randomFillSync(rnds8Pool); 19 | 20 | poolPtr = 0; 21 | } 22 | 23 | return rnds8Pool.slice(poolPtr, poolPtr += 16); 24 | } -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/uuid/dist/sha1.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.default = void 0; 7 | 8 | var _crypto = _interopRequireDefault(require("crypto")); 9 | 10 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 11 | 12 | function sha1(bytes) { 13 | if (Array.isArray(bytes)) { 14 | bytes = Buffer.from(bytes); 15 | } else if (typeof bytes === 'string') { 16 | bytes = Buffer.from(bytes, 'utf8'); 17 | } 18 | 19 | return _crypto.default.createHash('sha1').update(bytes).digest(); 20 | } 21 | 22 | var _default = sha1; 23 | exports.default = _default; -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/uuid/dist/umd/uuidNIL.min.js: -------------------------------------------------------------------------------- 1 | !function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e="undefined"!=typeof globalThis?globalThis:e||self).uuidNIL=n()}(this,(function(){"use strict";return"00000000-0000-0000-0000-000000000000"})); -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/uuid/dist/umd/uuidValidate.min.js: -------------------------------------------------------------------------------- 1 | !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).uuidValidate=t()}(this,(function(){"use strict";var e=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;return function(t){return"string"==typeof t&&e.test(t)}})); -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/uuid/dist/umd/uuidVersion.min.js: -------------------------------------------------------------------------------- 1 | !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).uuidVersion=t()}(this,(function(){"use strict";var e=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;return function(t){if(!function(t){return"string"==typeof t&&e.test(t)}(t))throw TypeError("Invalid UUID");return parseInt(t.substr(14,1),16)}})); -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/uuid/dist/v3.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.default = void 0; 7 | 8 | var _v = _interopRequireDefault(require("./v35.js")); 9 | 10 | var _md = _interopRequireDefault(require("./md5.js")); 11 | 12 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 13 | 14 | const v3 = (0, _v.default)('v3', 0x30, _md.default); 15 | var _default = v3; 16 | exports.default = _default; -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/uuid/dist/v5.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.default = void 0; 7 | 8 | var _v = _interopRequireDefault(require("./v35.js")); 9 | 10 | var _sha = _interopRequireDefault(require("./sha1.js")); 11 | 12 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 13 | 14 | const v5 = (0, _v.default)('v5', 0x50, _sha.default); 15 | var _default = v5; 16 | exports.default = _default; -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/uuid/dist/validate.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.default = void 0; 7 | 8 | var _regex = _interopRequireDefault(require("./regex.js")); 9 | 10 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 11 | 12 | function validate(uuid) { 13 | return typeof uuid === 'string' && _regex.default.test(uuid); 14 | } 15 | 16 | var _default = validate; 17 | exports.default = _default; -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/uuid/dist/version.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.default = void 0; 7 | 8 | var _validate = _interopRequireDefault(require("./validate.js")); 9 | 10 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 11 | 12 | function version(uuid) { 13 | if (!(0, _validate.default)(uuid)) { 14 | throw TypeError('Invalid UUID'); 15 | } 16 | 17 | return parseInt(uuid.substr(14, 1), 16); 18 | } 19 | 20 | var _default = version; 21 | exports.default = _default; -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/uuid/wrapper.mjs: -------------------------------------------------------------------------------- 1 | import uuid from './dist/index.js'; 2 | export const v1 = uuid.v1; 3 | export const v3 = uuid.v3; 4 | export const v4 = uuid.v4; 5 | export const v5 = uuid.v5; 6 | export const NIL = uuid.NIL; 7 | export const version = uuid.version; 8 | export const validate = uuid.validate; 9 | export const stringify = uuid.stringify; 10 | export const parse = uuid.parse; 11 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/webidl-conversions/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "webidl-conversions", 3 | "version": "3.0.1", 4 | "description": "Implements the WebIDL algorithms for converting to and from JavaScript values", 5 | "main": "lib/index.js", 6 | "scripts": { 7 | "test": "mocha test/*.js" 8 | }, 9 | "repository": "jsdom/webidl-conversions", 10 | "keywords": [ 11 | "webidl", 12 | "web", 13 | "types" 14 | ], 15 | "files": [ 16 | "lib/" 17 | ], 18 | "author": "Domenic Denicola (https://domenic.me/)", 19 | "license": "BSD-2-Clause", 20 | "devDependencies": { 21 | "mocha": "^1.21.4" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/whatwg-url/lib/public-api.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | exports.URL = require("./URL").interface; 4 | exports.serializeURL = require("./url-state-machine").serializeURL; 5 | exports.serializeURLOrigin = require("./url-state-machine").serializeURLOrigin; 6 | exports.basicURLParse = require("./url-state-machine").basicURLParse; 7 | exports.setTheUsername = require("./url-state-machine").setTheUsername; 8 | exports.setThePassword = require("./url-state-machine").setThePassword; 9 | exports.serializeHost = require("./url-state-machine").serializeHost; 10 | exports.serializeInteger = require("./url-state-machine").serializeInteger; 11 | exports.parseURL = require("./url-state-machine").parseURL; 12 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/whatwg-url/lib/utils.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | module.exports.mixin = function mixin(target, source) { 4 | const keys = Object.getOwnPropertyNames(source); 5 | for (let i = 0; i < keys.length; ++i) { 6 | Object.defineProperty(target, keys[i], Object.getOwnPropertyDescriptor(source, keys[i])); 7 | } 8 | }; 9 | 10 | module.exports.wrapperSymbol = Symbol("wrapper"); 11 | module.exports.implSymbol = Symbol("impl"); 12 | 13 | module.exports.wrapperForImpl = function (impl) { 14 | return impl[module.exports.wrapperSymbol]; 15 | }; 16 | 17 | module.exports.implForWrapper = function (wrapper) { 18 | return wrapper[module.exports.implSymbol]; 19 | }; 20 | 21 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/node_modules/wrappy/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "wrappy", 3 | "version": "1.0.2", 4 | "description": "Callback wrapping utility", 5 | "main": "wrappy.js", 6 | "files": [ 7 | "wrappy.js" 8 | ], 9 | "directories": { 10 | "test": "test" 11 | }, 12 | "dependencies": {}, 13 | "devDependencies": { 14 | "tap": "^2.3.1" 15 | }, 16 | "scripts": { 17 | "test": "tap --coverage test/*.js" 18 | }, 19 | "repository": { 20 | "type": "git", 21 | "url": "https://github.com/npm/wrappy" 22 | }, 23 | "author": "Isaac Z. Schlueter (http://blog.izs.me/)", 24 | "license": "ISC", 25 | "bugs": { 26 | "url": "https://github.com/npm/wrappy/issues" 27 | }, 28 | "homepage": "https://github.com/npm/wrappy" 29 | } 30 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.github/actions/deploy-s3-javascript/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "deploy-s3-javascript", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "main.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "@actions/core": "^1.9.1", 14 | "@actions/exec": "^1.1.1", 15 | "@actions/github": "^5.0.3" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | /node_modules 11 | /dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite + React 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/src/App.jsx: -------------------------------------------------------------------------------- 1 | import MainContent from './components/MainContent'; 2 | import logo from './assets/images/logo.png'; 3 | 4 | function App() { 5 | return ( 6 | <> 7 |
8 |
9 | 10 |
11 |

Learn & Master GitHub Actions

12 |
13 | 14 | 15 | ); 16 | } 17 | 18 | export default App; 19 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/src/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/academind/github-actions-course-resources/40301953af898062979c4a419ba470f5fa2a75f3/Code/08 Custom Actions/03 Finished Project/src/assets/images/logo.png -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/src/components/HelpArea.css: -------------------------------------------------------------------------------- 1 | #help-area { 2 | margin: auto; 3 | display: flex; 4 | } 5 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/src/components/HelpBox.css: -------------------------------------------------------------------------------- 1 | .help-box { 2 | padding: 1rem; 3 | border-radius: 4px; 4 | margin: 1; 5 | flex: 1; 6 | } 7 | 8 | .help-box h2 { 9 | color: #97a2a2; 10 | font-size: 1.05rem; 11 | } -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/src/components/HelpBox.jsx: -------------------------------------------------------------------------------- 1 | import { string } from 'prop-types'; 2 | 3 | import './HelpBox.css'; 4 | 5 | function HelpBox({ title, text }) { 6 | return ( 7 |
8 |

{title}

9 |

{text}

10 |
11 | ); 12 | } 13 | 14 | HelpBox.propTypes = { 15 | title: string, 16 | text: string, 17 | }; 18 | 19 | export default HelpBox; 20 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/src/components/MainContent.jsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react'; 2 | 3 | import HelpArea from './HelpArea'; 4 | 5 | function MainContent() { 6 | const [helpVisible, setHelpVisible] = useState(false); 7 | 8 | function toggleHelp() { 9 | setHelpVisible((isVisible) => !isVisible); 10 | } 11 | 12 | return ( 13 |
14 | 15 | {helpVisible && } 16 |
17 | ); 18 | } 19 | 20 | export default MainContent; 21 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/src/components/MainContent.test.jsx: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom'; 2 | import { render, screen } from '@testing-library/react'; 3 | import userEvent from '@testing-library/user-event'; 4 | 5 | import MainContent from './MainContent'; 6 | 7 | // My tests! 8 | // Add yet another comment 9 | 10 | describe('MainContent', () => { 11 | it('should render a button', () => { 12 | render(); 13 | 14 | expect(screen.getByRole('button')).toBeInTheDocument(); 15 | }); 16 | 17 | it('should show the help area after clicking the button', async () => { 18 | render(); 19 | 20 | const button = screen.getByRole('button'); 21 | await userEvent.click(button); 22 | expect(screen.getByTestId('help-area')).toBeInTheDocument(); 23 | }); 24 | }); 25 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/src/main.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom/client'; 3 | 4 | import App from './App'; 5 | import './index.css'; 6 | 7 | ReactDOM.createRoot(document.getElementById('root')).render( 8 | 9 | 10 | 11 | ); 12 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/src/test/setup.js: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom'; 2 | -------------------------------------------------------------------------------- /Code/08 Custom Actions/03 Finished Project/vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import react from '@vitejs/plugin-react'; 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [react()], 7 | test: { 8 | globals: true, 9 | environment: 'jsdom', 10 | setupFiles: './src/test/setup.js', 11 | reporters: ['json'], 12 | outputFile: 'test.json' 13 | }, 14 | }); 15 | -------------------------------------------------------------------------------- /Code/09 Security/01 Starting Project/.github/workflows/label-issues-real.yml: -------------------------------------------------------------------------------- 1 | name: Label Issues (Permissions Example) 2 | on: 3 | issues: 4 | types: 5 | - opened 6 | jobs: 7 | assign-label: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - name: Assign label 11 | if: contains(github.event.issue.title, 'bug') 12 | run: | 13 | curl -X POST \ 14 | --url https://api.github.com/repos/${{ github.repository }}/issues/${{ github.event.issue.number }}/labels \ 15 | -H 'authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' \ 16 | -H 'content-type: application/json' \ 17 | -d '{ 18 | "labels": ["bug"] 19 | }' \ 20 | --fail -------------------------------------------------------------------------------- /Code/09 Security/01 Starting Project/.github/workflows/script-injection.yml: -------------------------------------------------------------------------------- 1 | name: Label Issues (Script Injection Example) 2 | on: 3 | issues: 4 | types: 5 | - opened 6 | jobs: 7 | assign-label: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - name: Assign label 11 | run: | 12 | issue_title="${{ github.event.issue.title }}" 13 | if [[ "$issue_title" == *"bug"* ]]; then 14 | echo "Issue is about a bug!" 15 | else 16 | echo "Issue is not about a bug" 17 | fi -------------------------------------------------------------------------------- /Code/09 Security/01 Starting Project/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | .DS_Store 3 | .vscode -------------------------------------------------------------------------------- /Code/09 Security/01 Starting Project/README.md: -------------------------------------------------------------------------------- 1 | # Example Repo 2 | 3 | This is a super simple example repository! -------------------------------------------------------------------------------- /Code/09 Security/02 Finished Project/.github/workflows/label-issues-real.yml: -------------------------------------------------------------------------------- 1 | name: Label Issues (Permissions Example) 2 | on: 3 | issues: 4 | types: 5 | - opened 6 | jobs: 7 | assign-label: 8 | permissions: 9 | issues: write 10 | runs-on: ubuntu-latest 11 | steps: 12 | - name: Assign label 13 | if: contains(github.event.issue.title, 'bug') 14 | run: | 15 | curl -X POST \ 16 | --url https://api.github.com/repos/${{ github.repository }}/issues/${{ github.event.issue.number }}/labels \ 17 | -H 'authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' \ 18 | -H 'content-type: application/json' \ 19 | -d '{ 20 | "labels": ["bug"] 21 | }' \ 22 | --fail -------------------------------------------------------------------------------- /Code/09 Security/02 Finished Project/.github/workflows/script-injection.yml: -------------------------------------------------------------------------------- 1 | name: Label Issues (Script Injection Example) 2 | on: 3 | issues: 4 | types: 5 | - opened 6 | jobs: 7 | assign-label: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - name: Assign label 11 | env: 12 | TITLE: ${{ github.event.issue.title }} 13 | run: | 14 | if [[ "$TITLE" == *"bug"* ]]; then 15 | echo "Issue is about a bug!" 16 | else 17 | echo "Issue is not about a bug" 18 | fi -------------------------------------------------------------------------------- /Code/09 Security/02 Finished Project/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | .DS_Store 3 | .vscode -------------------------------------------------------------------------------- /Code/09 Security/02 Finished Project/README.md: -------------------------------------------------------------------------------- 1 | # Example Repo 2 | 3 | This is a super simple example repository! -------------------------------------------------------------------------------- /Code/ZZ Git & GitHub Refresher/01 Starting Project/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Git & GitHub Crash Course 8 | 9 | 10 |

Git & GitHub Crash Course

11 |

Because the basics are important!

12 | 13 | 14 | -------------------------------------------------------------------------------- /Code/ZZ Git & GitHub Refresher/02 Updated Project/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Git & GitHub Crash Course 8 | 9 | 10 |

Git & GitHub Crash Course

11 |

Because the basics are important!

12 |

13 | Learn more about Git on 14 | the official website. 15 |

16 | 17 | 18 | -------------------------------------------------------------------------------- /Code/ZZ Git & GitHub Refresher/03 Extra Files/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Git & GitHub Crash Course 8 | 9 | 10 | 11 | 12 |

Git & GitHub Crash Course

13 |

Because the basics are important!

14 | 15 | 16 | -------------------------------------------------------------------------------- /Code/ZZ Git & GitHub Refresher/03 Extra Files/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/academind/github-actions-course-resources/40301953af898062979c4a419ba470f5fa2a75f3/Code/ZZ Git & GitHub Refresher/03 Extra Files/logo.png -------------------------------------------------------------------------------- /Code/ZZ Git & GitHub Refresher/03 Extra Files/styles.css: -------------------------------------------------------------------------------- 1 | html { 2 | font-family: sans-serif; 3 | } 4 | 5 | body { 6 | margin: 0; 7 | text-align: center; 8 | background-color: #322e2d; 9 | color: #f6f0ee; 10 | } 11 | 12 | #logo { 13 | width: 7rem; 14 | height: 7rem; 15 | object-fit: contain; 16 | margin-top: 2rem; 17 | } 18 | 19 | h1 { 20 | color: #e8d4b2; 21 | } 22 | -------------------------------------------------------------------------------- /Code/ZZ Git & GitHub Refresher/04 Updated Files/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Git & GitHub Crash Course 8 | 9 | 10 | 11 |
12 | 13 |

Git & GitHub Crash Course

14 |
15 |
16 |

Because the basics are important!

17 |

18 | Learn more about Git in the 19 | official docs or 20 | our course. 21 |

22 |
23 | 24 | 25 | -------------------------------------------------------------------------------- /Code/ZZ Git & GitHub Refresher/04 Updated Files/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/academind/github-actions-course-resources/40301953af898062979c4a419ba470f5fa2a75f3/Code/ZZ Git & GitHub Refresher/04 Updated Files/logo.png -------------------------------------------------------------------------------- /Code/ZZ Git & GitHub Refresher/04 Updated Files/styles.css: -------------------------------------------------------------------------------- 1 | html { 2 | font-family: sans-serif; 3 | } 4 | 5 | body { 6 | margin: 0; 7 | text-align: center; 8 | background-color: #322e2d; 9 | color: #f6f0ee; 10 | } 11 | 12 | #logo { 13 | width: 7rem; 14 | height: 7rem; 15 | object-fit: contain; 16 | margin-top: 2rem; 17 | } 18 | 19 | h1 { 20 | color: #e8d4b2; 21 | } 22 | 23 | a { 24 | color: #fee389; 25 | } 26 | -------------------------------------------------------------------------------- /Code/ZZ Git & GitHub Refresher/05 Finished/.gitignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | .DS_Store -------------------------------------------------------------------------------- /Code/ZZ Git & GitHub Refresher/05 Finished/README.md: -------------------------------------------------------------------------------- 1 | # Important Instructions 2 | 3 | This is a demo repository for practicing Git & GitHub. 4 | -------------------------------------------------------------------------------- /Code/ZZ Git & GitHub Refresher/05 Finished/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/academind/github-actions-course-resources/40301953af898062979c4a419ba470f5fa2a75f3/Code/ZZ Git & GitHub Refresher/05 Finished/logo.png -------------------------------------------------------------------------------- /Code/ZZ Git & GitHub Refresher/05 Finished/styles.css: -------------------------------------------------------------------------------- 1 | html { 2 | font-family: sans-serif; 3 | } 4 | 5 | body { 6 | margin: 0; 7 | text-align: center; 8 | background-color: #322e2d; 9 | color: #f6f0ee; 10 | } 11 | 12 | #logo { 13 | width: 7rem; 14 | height: 7rem; 15 | object-fit: contain; 16 | margin-top: 2rem; 17 | } 18 | 19 | h1 { 20 | color: #efa82e; 21 | } 22 | 23 | a { 24 | color: #fee389; 25 | } 26 | -------------------------------------------------------------------------------- /Slides/github-actions.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/academind/github-actions-course-resources/40301953af898062979c4a419ba470f5fa2a75f3/Slides/github-actions.pdf --------------------------------------------------------------------------------