{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":508095301,"defaultBranch":"main","name":"Python-CI-CD-Workshop","ownerLogin":"Ishaipita","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2022-06-27T23:51:21.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/108309123?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1687349851.47423","currentOid":""},"activityList":{"items":[{"before":null,"after":"1585c14f41263abf71be96b1f3e7a273ad686916","ref":"refs/heads/Python-CI-CD-Workshop","pushedAt":"2023-06-21T12:17:31.474Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"Ishaipita","name":null,"path":"/Ishaipita","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/108309123?s=80&v=4"},"commit":{"message":"Update README.md","shortMessageHtmlLink":"Update README.md"}},{"before":"9c4c65d7fab9d3aaf450786d7c13dba78b63dc3c","after":"1585c14f41263abf71be96b1f3e7a273ad686916","ref":"refs/heads/main","pushedAt":"2023-06-21T07:47:20.180Z","pushType":"push","commitsCount":1,"pusher":{"login":"Ishaipita","name":null,"path":"/Ishaipita","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/108309123?s=80&v=4"},"commit":{"message":"Update README.md","shortMessageHtmlLink":"Update README.md"}},{"before":"46216cbec69399354a9426683ec4b0fe0fec8f57","after":null,"ref":"refs/heads/CI/CD","pushedAt":"2023-06-21T07:39:52.329Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"Ishaipita","name":null,"path":"/Ishaipita","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/108309123?s=80&v=4"}},{"before":"bcc7e0dd83a366c7833b65f3ff608a542377cf00","after":null,"ref":"refs/heads/circleci-project-setup","pushedAt":"2023-06-21T07:39:47.167Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"Ishaipita","name":null,"path":"/Ishaipita","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/108309123?s=80&v=4"}},{"before":"2c8d168023217bacae806f3389ee874574439148","after":"9c4c65d7fab9d3aaf450786d7c13dba78b63dc3c","ref":"refs/heads/main","pushedAt":"2023-06-21T07:36:58.019Z","pushType":"push","commitsCount":1,"pusher":{"login":"Ishaipita","name":null,"path":"/Ishaipita","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/108309123?s=80&v=4"},"commit":{"message":"Create test_hello_world.py\n\nCI/CD 101 using CircleCI\r\nThis repository contains a simple example of implementing Continuous Integration (CI) and Continuous Deployment (CD) using CircleCI. It showcases how to set up automated tests and deployment pipelines for a basic \"Hello, World!\" application.\r\n\r\nDescription\r\nThe code in this repository demonstrates the integration of CI/CD principles using the CircleCI platform. It includes a Flask-based \"Hello, World!\" application, along with unit tests implemented using the unittest framework.\r\n\r\nThe hello_world.py file contains the main application code, which defines a simple Flask server and a greeting function. The test_hello_world.py file contains unit tests to verify the functionality of the application.\r\n\r\nFeatures\r\nAutomated Testing: The repository includes a set of unit tests implemented using the unittest framework. These tests validate the expected behavior of the \"Hello, World!\" application.\r\nCircleCI Configuration: The repository is configured with a .circleci/config.yml file, which defines the CI/CD pipeline. It specifies the necessary steps to build, test, and deploy the application using CircleCI.\r\nDeployment: The CI/CD pipeline is set up to automatically deploy the application upon successful completion of the tests. The deployment process can be customized to suit specific requirements.\r\nUsage\r\nTo use this repository, follow these steps:\r\n\r\nClone the repository to your local machine using the following command:\r\n\r\nshell\r\nCopy code\r\ngit clone https://github.com/your-username/your-repository.git\r\nInstall the required dependencies. Assuming you have Python and pip installed, run the following command:\r\n\r\nshell\r\nCopy code\r\npip install -r requirements.txt\r\nRun the unit tests to verify the functionality of the application:\r\n\r\nshell\r\nCopy code\r\npython -m unittest test_hello_world.py\r\nIf all tests pass successfully, the application is functioning as expected.\r\n\r\n(Optional) Customize the application or tests according to your requirements.\r\n\r\nConnect the repository to your CircleCI account and configure the necessary environment variables and settings.\r\n\r\nPush your changes to the repository, and CircleCI will automatically trigger the CI/CD pipeline.\r\n\r\nContributing\r\nContributions to this repository are welcome! If you find any issues or have suggestions for improvements, feel free to open an issue or submit a pull request. Please follow the standard guidelines for contributions, including making descriptive commit messages and documenting your changes.\r\n\r\nLicense\r\nThis repository is licensed under the MIT License. You can find the details in the LICENSE file.\r\n\r\nFeel free to modify this description as per your requirements and provide additional information specific to your project.","shortMessageHtmlLink":"Create test_hello_world.py"}},{"before":"14c14742bb3d227541ca98b74a9b9a4fbb3cdf35","after":"2c8d168023217bacae806f3389ee874574439148","ref":"refs/heads/main","pushedAt":"2023-06-21T07:33:32.478Z","pushType":"push","commitsCount":1,"pusher":{"login":"Ishaipita","name":null,"path":"/Ishaipita","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/108309123?s=80&v=4"},"commit":{"message":"Create requirements.txt","shortMessageHtmlLink":"Create requirements.txt"}},{"before":"2b41cce1729a1ce4a1b42180ab1853fdeac4011c","after":"14c14742bb3d227541ca98b74a9b9a4fbb3cdf35","ref":"refs/heads/main","pushedAt":"2023-06-21T07:32:40.370Z","pushType":"push","commitsCount":1,"pusher":{"login":"Ishaipita","name":null,"path":"/Ishaipita","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/108309123?s=80&v=4"},"commit":{"message":"Create hello_world.py\n\nThis repository contains code for a Flask application that serves a simple HTML page. The purpose of this code is to demonstrate the implementation of a basic web application and its integration into a CI/CD pipeline using CircleCI.\r\n\r\nKey features of this repository include:\r\n\r\nFlask Application: The code sets up a Flask application using the Flask framework. It imports the Flask module, creates an instance of the Flask app, and defines a route for the root URL (\"/\") that returns an HTML response.\r\n\r\nHTML Generation: The code includes a function, generate_html(message), that generates an HTML page with a centered image and a message. The message is passed as a parameter to the function and dynamically inserted into the HTML template.\r\n\r\nGreetings Function: The code also includes a function, greet(), that returns a welcome message. This function is used to generate the message displayed on the HTML page.\r\n\r\nRoute Definition: The code uses the @app.route('/') decorator to define the route for the root URL (\"/\"). When the root URL is accessed, the hello_world() function is executed, which generates the HTML page by calling generate_html() with the result of greet().\r\n\r\nServer Configuration: The code includes server configuration settings to run the Flask application. It uses the app.run() method to start the application on the local server, listening on host \"0.0.0.0\" and port 5000.\r\n\r\nBy leveraging this code, you can learn about building a basic web application using Flask, creating dynamic HTML content, and defining routes for different URLs. Additionally, this repository serves as a starting point for incorporating CI/CD practices into your Flask application using CircleCI.\r\n\r\nFeel free to explore, modify, and integrate this code into your own projects as you dive into CI/CD with Flask and CircleCI.","shortMessageHtmlLink":"Create hello_world.py"}},{"before":"5a155f5b8a561daff90c881d2dd5b3bdcbb98bfc","after":"2b41cce1729a1ce4a1b42180ab1853fdeac4011c","ref":"refs/heads/main","pushedAt":"2023-06-21T07:28:25.773Z","pushType":"push","commitsCount":1,"pusher":{"login":"Ishaipita","name":null,"path":"/Ishaipita","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/108309123?s=80&v=4"},"commit":{"message":"Create README.md\n\nWelcome to the \"Introduction to CI/CD Workshop\" repository! This repository serves as a comprehensive resource for learning and implementing Continuous Integration and Continuous Deployment (CI/CD) pipelines into your codebase.\r\n\r\nThe primary goals of this workshop are to:\r\n\r\nProvide a codebase that can be used as a practical example for implementing CI/CD.\r\nOffer a step-by-step tutorial that explains the concepts and processes involved in setting up a CI/CD pipeline.\r\nDemonstrate how CI/CD can enhance software development practices, including automation, testing, and deployment.\r\nEmpower developers to integrate CI/CD into their own projects and workflows.\r\nKey features of this repository and workshop include:\r\n\r\nCodebase: The repository hosts a sample codebase that serves as the foundation for the CI/CD implementation. This codebase encompasses a practical application or project to showcase the CI/CD concepts effectively.\r\n\r\nTutorial: The workshop includes a detailed tutorial that guides participants through the process of setting up a CI/CD pipeline step-by-step. The tutorial covers essential topics such as version control, automated testing, build automation, and deployment strategies. Each step is explained thoroughly, ensuring a clear understanding of the concepts and their practical application.\r\n\r\nBest Practices: The workshop emphasizes industry best practices for implementing CI/CD pipelines. It covers topics such as branch management, code reviews, testing strategies, and deployment strategies. These best practices ensure a robust and efficient CI/CD workflow.\r\n\r\nTooling: The workshop introduces popular CI/CD tools and technologies, providing participants with exposure to a range of options. This allows developers to choose the tools that best fit their project requirements and infrastructure.\r\n\r\nBy following this workshop, you will gain a solid understanding of CI/CD principles, acquire hands-on experience in setting up a CI/CD pipeline, and be equipped with the knowledge to integrate CI/CD into your own projects.\r\n\r\nStart your journey toward efficient and automated software development with CI/CD by exploring this repository and following the comprehensive tutorial. Happy learning and coding!","shortMessageHtmlLink":"Create README.md"}},{"before":"29a1d5d7387db31cccb3bcc01c1b966f1a7fe487","after":"5a155f5b8a561daff90c881d2dd5b3bdcbb98bfc","ref":"refs/heads/main","pushedAt":"2023-06-21T07:22:42.062Z","pushType":"push","commitsCount":1,"pusher":{"login":"Ishaipita","name":null,"path":"/Ishaipita","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/108309123?s=80&v=4"},"commit":{"message":"Create Dockerfile\n\nThis repository contains code for a Python project based on Python 3.9. The project sets up a Docker container to run a \"Hello World\" application.\r\n\r\nThe Dockerfile in this repository includes the following steps:\r\n\r\nIt starts from the official Python 3.9 base image.\r\nCreates a directory called /opt/hello_world/ inside the container and sets it as the working directory.\r\nCopies the requirements.txt file from the repository to the /opt/hello_world/ directory inside the container.\r\nCopies the hello_world executable or binary file (presumably built beforehand) from the dist/ directory of the repository to the /opt/hello_world/ directory inside the container.\r\nExposes port 80 to allow communication with the running container.\r\nSpecifies the command to execute when the container is started, which is ./hello_world within the /opt/hello_world/ directory.\r\nThis repository is suitable for building and running the \"Hello World\" application within a Docker container. It provides a streamlined setup process by using the Dockerfile and includes the necessary requirements and executable file. The exposed port allows external communication with the running container, and the CMD instruction defines the entry point of the container.\r\n\r\nBy leveraging Docker, this repository facilitates the deployment and isolation of the \"Hello World\" application, making it easier to distribute and run the code consistently across different environments.","shortMessageHtmlLink":"Create Dockerfile"}},{"before":"349cd84bd7ccb3a0d766fd8cf9f73aaa6293c0f5","after":"29a1d5d7387db31cccb3bcc01c1b966f1a7fe487","ref":"refs/heads/main","pushedAt":"2023-06-21T07:17:54.094Z","pushType":"push","commitsCount":1,"pusher":{"login":"Ishaipita","name":null,"path":"/Ishaipita","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/108309123?s=80&v=4"},"commit":{"message":"Create .gitignore\n\nThis repository contains code for a project written in Python. It includes various file and directory exclusions for optimizing the repository structure and ignoring unnecessary or generated files.\r\n\r\nKey features of this project include:\r\n\r\nAutomatic exclusion of byte-compiled, optimized, and DLL files.\r\nIgnoring C extension files (*.so) that might be generated during the build process.\r\nExcluding distribution and packaging-related directories, such as those used by package managers and build systems.\r\nIgnoring PyInstaller-related files, typically used for creating executable files.\r\nExclusion of installer logs and unit test/coverage reports.\r\nIgnoring translation-related files.\r\nExcluding logs and configuration files specific to Django, Flask, and Scrapy frameworks.\r\nIgnoring documentation build artifacts for Sphinx.\r\nExcluding project-specific files and directories for PyBuilder, IPython Notebook, pyenv, and other development tools.\r\nIgnoring security and credential files.\r\nIgnoring Terraform-related files, such as executables, plans, and states.\r\nExcluding various temporary, backup, and intermediate files.\r\nIgnoring IDE-specific files and directories, including those for Visual Studio Code, PyCharm, and IntelliJ IDEA.\r\nExcluding files and directories related to Vagrant, virtual environments (venv/ENV/), and package managers like Bundler and npm.\r\nIgnoring specific files related to the project's infrastructure and deployment.\r\nIncluding specific exceptions to ignore test fixtures for commands and their associated Terraform states and results directories.\r\nThis repository is designed to maintain a clean and organized project structure while avoiding versioning unnecessary files and optimizing the development workflow. It promotes best practices and helps ensure that only essential code and resources are included in the repository.","shortMessageHtmlLink":"Create .gitignore"}},{"before":"0e4821df33359d41138ce6485d496cb8b1cd1d9c","after":"349cd84bd7ccb3a0d766fd8cf9f73aaa6293c0f5","ref":"refs/heads/main","pushedAt":"2023-06-21T07:12:22.084Z","pushType":"push","commitsCount":1,"pusher":{"login":"Ishaipita","name":null,"path":"/Ishaipita","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/108309123?s=80&v=4"},"commit":{"message":"Create cicd_101_guide.md\n\nCI/CD Python Flask Application with CircleCI\r\nThis repository showcases a Python Flask application with a complete CI/CD pipeline implemented using CircleCI. The pipeline automates the build, testing, and deployment process, ensuring that the codebase is continuously integrated and deployed in a controlled and reliable manner.\r\n\r\nFeatures\r\nPython Flask Application: The repository contains a simple Python Flask application that serves as an example web server. When a request is made to the server, it returns a rendered HTML page with a welcome message.\r\nUnit Testing with Unittest: The Flask application includes a companion unit test file using Python's built-in unittest framework. These tests verify the functionality and correctness of the application, ensuring the code meets quality standards.\r\nCircleCI Integration: The repository is integrated with CircleCI, a popular continuous integration and delivery platform. CircleCI automatically triggers the CI/CD pipeline on every code commit, running the defined jobs and providing insights into the build status.\r\nDocker Image Building: The CI/CD pipeline includes a step to build a Docker image of the Flask application. The Docker image encapsulates the application and its dependencies, providing a portable and consistent environment for deployment.\r\nDocker Hub Deployment: Once the Docker image is built, it is deployed to Docker Hub, a cloud-based container registry. This enables easy distribution and sharing of the application's Docker image with other developers or deployment targets.\r\nGetting Started\r\nTo get started with this project, follow these steps:\r\n\r\nPrerequisites: Ensure you have the required accounts for GitHub, CircleCI, and Docker Hub.\r\nFork and Clone: Fork this repository and clone it to your local development environment.\r\nSet up CircleCI: Connect your GitHub repository to CircleCI and configure the project settings in the CircleCI dashboard.\r\nConfigure Environment Variables: Set up the necessary environment variables in the CircleCI project settings, including $DOCKER_LOGIN and $DOCKER_PWD for Docker Hub authentication.\r\nExplore the Code: Take a look at the Flask application code in the hello_world.py file and the corresponding unit test in test_hello_world.py. Customize the application and tests to suit your needs.\r\nCustomize the Pipeline: Modify the .circleci/config.yml file to adapt the CI/CD pipeline to your specific requirements. You can add more test cases, include additional build steps, or integrate with other tools and services as needed.\r\nCommit and Push: Make changes to the codebase, commit them, and push to your GitHub repository. CircleCI will automatically detect the changes and trigger the CI/CD pipeline.\r\nMonitor the Pipeline: Monitor the progress of the pipeline in the CircleCI dashboard. View the build logs, test results, and deployment status to ensure everything is running smoothly.\r\nEnjoy Continuous Integration and Deployment: With the CI/CD pipeline in place, any subsequent code changes pushed to the repository will trigger automated builds, tests, and deployments, providing a streamlined development and release process.\r\nContribution\r\nIf you find any issues or have suggestions for improvements, feel free to open an issue or submit a pull request. Contributions from the community are highly appreciated!\r\n\r\nLicense\r\nThis project is licensed under the MIT License. See the LICENSE file for more information.\r\n\r\nAcknowledgements\r\nSpecial thanks to the creators and contributors of the tools and frameworks used in this project, including Flask, unittest, CircleCI, and Docker. Their efforts enable developers to build robust and efficient CI/CD pipelines for their applications.\r\n\r\nReferences\r\nCircleCI Documentation\r\nFlask Documentation\r\n[Python unittest Documentation](https://docs.python.org","shortMessageHtmlLink":"Create cicd_101_guide.md"}},{"before":"504a65817ede18a802aa954a8b7d12d38ebdf8dc","after":"0e4821df33359d41138ce6485d496cb8b1cd1d9c","ref":"refs/heads/main","pushedAt":"2023-06-21T07:06:22.016Z","pushType":"push","commitsCount":1,"pusher":{"login":"Ishaipita","name":null,"path":"/Ishaipita","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/108309123?s=80&v=4"},"commit":{"message":"Create main.tf\n\nCI/CD Workshop Google Cloud Terraform\r\nThis repository contains Terraform code that demonstrates how to create a new Google Cloud Instance and deploy a Docker container using Google's Container-Optimized OS image. The Container-Optimized OS is an operating system image optimized for running Docker containers on Compute Engine VMs. By leveraging this image, you can quickly and securely deploy your Docker containers on Google Cloud Platform.\r\n\r\nPrerequisites\r\nBefore using this code, ensure that you have completed the following steps:\r\n\r\nCreate a free Google Cloud account.\r\nCreate a new Google Cloud Platform project by following the instructions here.\r\nGenerate Google Cloud credentials by visiting the create service account key page. Save the JSON credentials file in the terraform/google_cloud/ directory. Rename the file to cicd_demo_gcp_creds.json for security reasons and add it to the project's .gitignore file to prevent accidental exposure.\r\nInstall Terraform locally by following the instructions here.\r\nUsage\r\nTo use this Terraform code, follow these steps:\r\n\r\nOpen a terminal and navigate to the terraform/google_cloud/ directory.\r\nRun terraform init to initialize the Google Terraform Plugins.\r\nUpdate the values in the main.tf file according to your project's configuration:\r\nModify the project_name variable to match the name of your Google Cloud project.\r\nUpdate the docker_declaration variable with the desired Docker image.\r\nAdjust other variables, such as port_number and boot_image_name, if necessary.\r\nRun terraform plan -out=plan.txt to generate an execution plan and preview the changes that Terraform will make.\r\nExecute the plan by running terraform apply plan.txt. This command will create a new Google Compute Instance based on the Terraform configuration and the specified Docker image.\r\nOnce the instance is created, the public IP address will be displayed as the output. Copy the IP address and append :5000 to access the deployed application, e.g., http://:5000.\r\nTo clean up the resources created by Terraform, run terraform destroy. This command will destroy the assets created in this tutorial.\r\nOptional: DNS Host Configuration\r\nIf you want to assign a domain name to your deployment, you can follow these optional steps to configure a DNS hostname using NameCheap.com:\r\n\r\nInstall the terraform-provider-namecheap plugin by running the provided commands in a terminal. This plugin allows Terraform to interact with NameCheap.com.\r\nRetrieve your NameCheap.com API credentials and tokens by enabling API access and following the instructions provided here.\r\nConfigure the namecheap.tf file with your NameCheap provider credentials, domain name, and desired host name. Remember to protect the sensitive information in this file and add it to the project's .gitignore file.\r\nRun terraform apply to create a new DNS hostname entry for your domain using the specified host name.\r\nSummary\r\nThis repository provides a comprehensive guide and Terraform code for deploying a server on Google Cloud Platform and running a Docker container using Terraform. By following the instructions and customizing the variables to match your project's requirements, you can quickly set up a CI/CD environment with ease.\r\n\r\nResources","shortMessageHtmlLink":"Create main.tf"}},{"before":"8e1b6f1bb7f06876098552a117f9cb08586e5175","after":"504a65817ede18a802aa954a8b7d12d38ebdf8dc","ref":"refs/heads/main","pushedAt":"2023-06-21T07:00:22.606Z","pushType":"push","commitsCount":1,"pusher":{"login":"Ishaipita","name":null,"path":"/Ishaipita","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/108309123?s=80&v=4"},"commit":{"message":"Create README.md\n\nTo get started with this project, you'll need to follow these steps:\r\n\r\nCreate a free Google Cloud account.\r\nCreate a new Google Cloud Platform project using the instructions provided here.\r\nGenerate Google Cloud project credentials by following the steps outlined here and save the JSON file as cicd_demo_gcp_creds.json in the terraform/google_cloud/ directory.\r\nNote: Ensure you protect the credentials file and avoid exposing it publicly.\r\nInstall Terraform locally by following the installation instructions provided here.\r\nSet up Terraform by navigating to the terraform/google_cloud/ directory in a terminal and running the command terraform init to install the Google Terraform plugins.\r\nModify the values in the main.tf file to match your project's information. Specifically, update the project_name variable with your project's name and the docker_declaration variable with the Docker image you want to use.\r\nPreview the execution plan by running terraform plan -out=plan.txt in the terminal. This command will display the changes Terraform will make without actually applying them.\r\nApply the changes and create the Google Compute Instance by executing the command terraform apply plan.txt. Terraform will deploy the instance and run the Docker image specified in the configuration.\r\nOnce the deployment is complete, you will see the public IP address of the Google Compute Instance in the output. Access the application by pasting the IP address into a web browser with port 5000 appended to the end, for example: http://:5000.\r\nTo clean up and destroy the created resources, run terraform destroy from the terraform/google_cloud/ directory. This command will remove the Google Compute Instance and associated resources.","shortMessageHtmlLink":"Create README.md"}},{"before":"1e608a31d83250f3378944de86b9b6191f690a9b","after":"8e1b6f1bb7f06876098552a117f9cb08586e5175","ref":"refs/heads/main","pushedAt":"2023-06-21T06:56:42.984Z","pushType":"push","commitsCount":1,"pusher":{"login":"Ishaipita","name":null,"path":"/Ishaipita","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/108309123?s=80&v=4"},"commit":{"message":"Create config.yml\n\nIn this updated code:\r\n\r\nThe workflow is triggered on pushes to the main branch.\r\nThe jobs build_test and build_push_docker_image are defined.\r\nThe build_push_docker_image job has a dependency on the build_test job using needs.\r\nEach job runs on the latest version of Ubuntu.\r\nThe necessary setup and installation steps for Python and Docker are included.\r\nThe Docker image is built, tagged, and pushed to Docker Hub.\r\nThe workflow test_build_deploy is defined, which includes both jobs and is triggered on pushes to the main branch.","shortMessageHtmlLink":"Create config.yml"}},{"before":"2318da29b74e0475b37297d2f614ff5829b175e0","after":"1e608a31d83250f3378944de86b9b6191f690a9b","ref":"refs/heads/main","pushedAt":"2023-06-21T06:50:28.467Z","pushType":"push","commitsCount":1,"pusher":{"login":"Ishaipita","name":null,"path":"/Ishaipita","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/108309123?s=80&v=4"},"commit":{"message":"Create main.workflow","shortMessageHtmlLink":"Create main.workflow"}},{"before":"80af4e9325e74bf8313142aa8f06982741632bae","after":"2318da29b74e0475b37297d2f614ff5829b175e0","ref":"refs/heads/main","pushedAt":"2023-06-21T06:50:00.431Z","pushType":"push","commitsCount":1,"pusher":{"login":"Ishaipita","name":null,"path":"/Ishaipita","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/108309123?s=80&v=4"},"commit":{"message":"Create deploy.sh","shortMessageHtmlLink":"Create deploy.sh"}},{"before":"fad0675080d2af2b22e972839ecd6aca5a89198e","after":"80af4e9325e74bf8313142aa8f06982741632bae","ref":"refs/heads/main","pushedAt":"2023-06-21T06:49:25.020Z","pushType":"push","commitsCount":1,"pusher":{"login":"Ishaipita","name":null,"path":"/Ishaipita","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/108309123?s=80&v=4"},"commit":{"message":"Delete deploy.sh","shortMessageHtmlLink":"Delete deploy.sh"}},{"before":"3297d0687c1554c73397e99a5eb2a3e8e4b1db59","after":"fad0675080d2af2b22e972839ecd6aca5a89198e","ref":"refs/heads/main","pushedAt":"2023-06-21T06:49:10.863Z","pushType":"push","commitsCount":1,"pusher":{"login":"Ishaipita","name":null,"path":"/Ishaipita","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/108309123?s=80&v=4"},"commit":{"message":"Delete build_test.sh","shortMessageHtmlLink":"Delete build_test.sh"}},{"before":"7eb0ba75184ea271b55026d73a3f1ec3dd78ca82","after":"3297d0687c1554c73397e99a5eb2a3e8e4b1db59","ref":"refs/heads/main","pushedAt":"2023-06-21T06:49:02.050Z","pushType":"push","commitsCount":1,"pusher":{"login":"Ishaipita","name":null,"path":"/Ishaipita","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/108309123?s=80&v=4"},"commit":{"message":"Delete main.workflow","shortMessageHtmlLink":"Delete main.workflow"}},{"before":"92557744de785094e8049dab6ffbf37e3681e86b","after":"7eb0ba75184ea271b55026d73a3f1ec3dd78ca82","ref":"refs/heads/main","pushedAt":"2023-06-21T06:48:22.579Z","pushType":"push","commitsCount":1,"pusher":{"login":"Ishaipita","name":null,"path":"/Ishaipita","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/108309123?s=80&v=4"},"commit":{"message":"Update and rename .github to .github /build_test.sh","shortMessageHtmlLink":"Update and rename .github to .github /build_test.sh"}},{"before":"2f6e78f5771e29972d50d6db443df2d7d89e7360","after":"92557744de785094e8049dab6ffbf37e3681e86b","ref":"refs/heads/main","pushedAt":"2023-06-21T06:45:35.728Z","pushType":"push","commitsCount":1,"pusher":{"login":"Ishaipita","name":null,"path":"/Ishaipita","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/108309123?s=80&v=4"},"commit":{"message":"Create .github","shortMessageHtmlLink":"Create .github"}},{"before":"3189f08bc153a76869af5bf62b2e8c5c19de5941","after":"2f6e78f5771e29972d50d6db443df2d7d89e7360","ref":"refs/heads/main","pushedAt":"2023-06-21T06:34:24.210Z","pushType":"push","commitsCount":1,"pusher":{"login":"Ishaipita","name":null,"path":"/Ishaipita","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/108309123?s=80&v=4"},"commit":{"message":"Update and rename .github to build_test.sh","shortMessageHtmlLink":"Update and rename .github to build_test.sh"}},{"before":"b56258c001ab66229d791ffc2d2fcb3d9591690e","after":"3189f08bc153a76869af5bf62b2e8c5c19de5941","ref":"refs/heads/main","pushedAt":"2023-06-21T06:33:52.906Z","pushType":"push","commitsCount":1,"pusher":{"login":"Ishaipita","name":null,"path":"/Ishaipita","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/108309123?s=80&v=4"},"commit":{"message":"Update and rename config.yml to main.workflow","shortMessageHtmlLink":"Update and rename config.yml to main.workflow"}},{"before":"187b6c8538de24fac03a8d8e51799c7a3f19943b","after":"b56258c001ab66229d791ffc2d2fcb3d9591690e","ref":"refs/heads/main","pushedAt":"2023-06-21T06:32:58.165Z","pushType":"push","commitsCount":1,"pusher":{"login":"Ishaipita","name":null,"path":"/Ishaipita","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/108309123?s=80&v=4"},"commit":{"message":"Create deploy.sh","shortMessageHtmlLink":"Create deploy.sh"}},{"before":"457a612b5cd99ea1dc755230e86975f3fbc2ed28","after":"187b6c8538de24fac03a8d8e51799c7a3f19943b","ref":"refs/heads/main","pushedAt":"2023-06-20T09:03:12.678Z","pushType":"push","commitsCount":1,"pusher":{"login":"Ishaipita","name":null,"path":"/Ishaipita","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/108309123?s=80&v=4"},"commit":{"message":"Create .github","shortMessageHtmlLink":"Create .github"}},{"before":"46216cbec69399354a9426683ec4b0fe0fec8f57","after":null,"ref":"refs/heads/python-cicd-workshop","pushedAt":"2023-06-20T08:57:48.109Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"Ishaipita","name":null,"path":"/Ishaipita","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/108309123?s=80&v=4"}},{"before":"e11943d76c23226fd764ebeda27d4780fe12cb9a","after":"bcc7e0dd83a366c7833b65f3ff608a542377cf00","ref":"refs/heads/circleci-project-setup","pushedAt":"2023-06-20T08:56:46.244Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"Ishaipita","name":null,"path":"/Ishaipita","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/108309123?s=80&v=4"},"commit":{"message":"Merge pull request #3 from Ishaipita/python-cicd-workshop\n\n.circleci/config.yml/n","shortMessageHtmlLink":"Merge pull request #3 from Ishaipita/python-cicd-workshop"}},{"before":null,"after":"46216cbec69399354a9426683ec4b0fe0fec8f57","ref":"refs/heads/python-cicd-workshop","pushedAt":"2023-06-20T08:52:04.566Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"Ishaipita","name":null,"path":"/Ishaipita","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/108309123?s=80&v=4"},"commit":{"message":".circleci/config.yml/n","shortMessageHtmlLink":".circleci/config.yml/n"}},{"before":"b6f467104b83c6c88c1f9d8493e9572c7a48842b","after":"457a612b5cd99ea1dc755230e86975f3fbc2ed28","ref":"refs/heads/main","pushedAt":"2023-06-20T08:44:20.199Z","pushType":"push","commitsCount":1,"pusher":{"login":"Ishaipita","name":null,"path":"/Ishaipita","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/108309123?s=80&v=4"},"commit":{"message":"Delete #!/bin/#!/bin directory","shortMessageHtmlLink":"Delete #!/bin/#!/bin directory"}},{"before":"677909a245d62d3ee31339bba8ad0e6bd119fa27","after":"46216cbec69399354a9426683ec4b0fe0fec8f57","ref":"refs/heads/CI/CD","pushedAt":"2023-06-20T08:36:21.366Z","pushType":"push","commitsCount":1,"pusher":{"login":"Ishaipita","name":null,"path":"/Ishaipita","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/108309123?s=80&v=4"},"commit":{"message":".circleci/config.yml/n","shortMessageHtmlLink":".circleci/config.yml/n"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"startCursor":"Y3Vyc29yOnYyOpK7MjAyMy0wNi0yMVQxMjoxNzozMS40NzQyMzBazwAAAANGB9wZ","endCursor":"Y3Vyc29yOnYyOpK7MjAyMy0wNi0yMFQwODozNjoyMS4zNjYxMDRazwAAAANFBDOI"}},"title":"Activity ยท Ishaipita/Python-CI-CD-Workshop"}