Coder Social home page Coder Social logo

github-actions-for-ci's Introduction

Darshan Sen

Contact Details

Experience

Postman

Technical Lead, June 2021 - Present

  • As a Technical Lead, I have driven initiatives, chaired team meetings, onboarded 8 engineers on all our projects, been the key reviewer of all the work that my team has done and provided 1:1 mentorship to all of my teammates
  • As a prolific Open Source contributor belonging to the Governance of megaprojects like Node.js and Electron, I gave several talks to the entire engineering team of Postman and was able to mentor my colleagues to successfully make valuable contributions to Electron (electron/electron#34974) and Node.js (nodejs/node#44532)
  • Laid the groundwork for hooking in additional native C++ modules into our custom build of Electron which makes use of the internal features of Chromium. For example, one such module I wrote enables the Postman Enterprise app to use the registry on Windows, Mac OS X user defaults on macOS and snap configuration options on Linux for reading key-value pairs that have been set by an Admin in an Enterprise deployment environment.
  • Redefined how my team approaches performance problems by creating https://github.com/RaisinTen/perftrace, a JavaScript module which enables the visualization of performance bottlenecks in any JavaScript application
  • Top contributor to an R&D C++ and JavaScript framework for creating cross-platform native desktop, mobile and CLI apps, where I authored key parts of the framework, like JavaScript support (V8 on Windows and JavaScriptCore on Apple and Linux), event loop, networking capabilities and owned the development of the entire framework on Windows using Win32 APIs
  • Led a team of 4 engineers to develop a C++ library with an accompanying Node.js addon to send HTTP and WebSocket requests using a fully relocatable build of libcurl
  • Created a C++ HTTP client that uses WinHTTP on Windows, NSURLSession on Apple and libsoup on GNOME - https://github.com/RaisinTen/benoni

Node.js

TSC Member, Core Collaborator, Triager, October 2020 - January 2024

  • Nominated by the project community to serve as a TSC Member, Core Collaborator and Triager for my quality code contributions and valuable code reviews
  • Won the "Outstanding Contribution from a New Arrival" award as part of the JavaScriptLandia Awards at 2022's OpenJS World - https://openjsf.org/blog/first-ever-javascriptlandia-awards-celebrate-community-leaders
  • 36th highest contributor of C++ and JavaScript features, bug fixes and performance improvements across all subsystems of Node.js
  • Primarily known for being the lead of the "Single executable applications" Strategic Initiative, which I have initially implemented in nodejs/node#45038
  • Provided 1:1 mentorship to numerous contributors and onboarded 6 collaborators
  • Contributed to other high-profile C++ and C projects like V8, libuv and OpenSSL for the betterment of Node.js

Electron

Governance Member, July 2022 - May 2024

  • Nominated by the project community to serve as a Governance Member for my quality code contributions and valuable code reviews
  • 54th highest contributor of C++ and Objective-C++ fixes for various kinds of GUI bugs and crashes
  • Contributed a 60% performance improvement for a complex and long-standing Intel macOS performance problem that was affecting the startup performance of Google Chrome and all Electron-based apps in the world by profiling the C++ application startup code using Perfetto API calls and ultimately came up with the fix in https://chromium-review.googlesource.com/c/crashpad/crashpad/+/3721655
  • Used LLDB and GDB to debug complicated C++ crashes in Electron and Chromium by attaching the debugging symbols to the release builds of Electron, like in electron/electron#33913 and posted a blog about my journey in https://gist.github.com/RaisinTen/5c065d28789d7a95a23af2db8e0e6c75 to motivate my team to tackle similar issues
  • Worked with the Chromium C++ thread pool to create async and non-blocking functionalities - electron/electron#31023
  • Collaborated with the Chromium team to fix difficult GN bugs in the Electron build system
  • Contributed to other high-profile C++ projects like Chromium, Crashpad and Perfetto for the betterment of Electron

Deno

Contributor, August 2022 - September 2022

  • Once, I decided to challenge myself to land a valuable contribution in Deno, despite my inexperience in Rust, so I attempted solving a serde_v8 bug - denoland/deno#11502 while teaching myself Rust and I ended up landing the key improvement in Rusty V8 - denoland/rusty_v8#1049, bringing the change into Deno in the rusty_v8 upgrade - denoland/deno#15762 and finally fixing the issue in denoland/deno#15946

Education

West Bengal University of Technology, 2017 - 2021

Bachelor of Technology in Computer Science & Engineering

DGPA - 9.28 / 10

Skills

C++, C, Node.js, Electron, JavaScript, TypeScript, Objective-C, Python, Rust, Bash, Git

github-actions-for-ci's People

Contributors

dependabot[bot] avatar github-learning-lab[bot] avatar hectorsector avatar mattdavis0351 avatar raisinten avatar

Watchers

 avatar  avatar  avatar

github-actions-for-ci's Issues

Congratulations!

Congratulations!

Nice work, you did it! Your workflows now contain:

  • test against multiple targets so that we know if our supported operating systems and Node.js versions are working
  • dedicated test job so that we can separate out build from test details
  • access to build artifacts so that we can deploy them to a target environment
  • branch protections so that the master branch can't be deleted or inadvertently broken
  • required reviews so that any pull requests are double checked by teammates
  • obvious approvals so we can merge quickly and potentially automate merges and deployments

What's next?

There's so much more you can do with continuous integration, and you have a solid start. Now...what will you learn next?

There's a bug!

Welcome

In this repository, we'll be diving into the world of Continuous Integration. Continuous Integration, or CI, can benefit your projects and change how you work on GitHub. If you're new to Continuous Integration, you may be thinking, "What exactly is it, and do I need it in my project?"

What is CI? Why should you care?

a gear and a loop, representing continuous integration

CI can help you stick to your team’s quality standards by running tests and reporting the results on GitHub. CI tools run builds and tests, triggered by commits. The results post back to GitHub in the pull request. This reduces context switching for developers, and improves consistency for testing. The goal is fewer bugs in production and faster feedback while developing.

Choices around CI that will work best for your project depend on many factors, including:

  • Programming language and application architecture
  • Operating system and browsers you plan to support
  • Your team’s experience and skills
  • Scaling capabilities and plans for growth
  • Geographic distribution of dependent systems and the people who use them
  • Packaging and delivery goals

Using CI and Learning Lab

In other courses, you may have noticed that some actions take me longer to respond to than others. In this course, many of the actions will be related to builds. Those builds sometimes take longer to build, up to several minutes. Don't be concerned if I take a few minutes to respond, or if I respond too quickly. Sometimes, I'll let you know what the build will say before it finishes! Please wait for the builds to finish before moving on to your next step.

If you aren't already familiar, it may be a good idea to go through the Introduction to GitHub Learning Lab.

Step 1: Use a templated workflow

icon of a bug in a browser window

There's a bug somewhere in this repository. We'll use the practice of Continuous Integration (CI) to set up some automated testing to make it easier to discover, diagnose, and minimize scenarios like this.

Let's first introduce CI to this repository. The codebase is written with Node.js. GitHub Actions allows us to use some templated workflows for common languages and frameworks, like Node.js! Let's add it:

⌨️ Activity: Create a pull request with a templated workflow

  1. Go to the Actions tab.
  2. Choose the template Node.js workflow.
  3. Commit the workflow to a new branch.
  4. Create a pull request titled CI for Node.

I'll respond in the new pull request when I detect it has been created.


If at any point you're expecting a response and don't see one, refresh the page.

A workflow for the entire team

Custom workflow

Now that we've learned how to quickly set up CI, let's try a more realistic use case.

Our fictional team has a custom workflow that goes beyond the template we've used so far. We would like the following features:

an icon of three gears

Test against multiple targets so that we know if our supported operating systems and Node.js versions are working

icon of gears indicating relationship between multiple jobs

Dedicated test job so that we can separate out build from test details

icon of a binary file

Access to build artifacts so that we can deploy them to a target environment

icon of a security shield indicating branch protections

Branch protections so that the master branch can't be deleted or inadvertently broken

icon of a review approval

Required reviews so that any pull requests are double checked by teammates

icon of a review approval

Obvious approvals so we can merge quickly and potentially automate merges and deployments

Step 7: Create a custom GitHub Actions workflow

Can GitHub Actions support this workflow? Let's find out. We'll tackle some of the changes to the existing workflow file first.

⌨️ Activity: Edit the existing workflow with new build targets

  1. Edit your existing workflow file in a new branch
  2. In that file, target versions 12.x and 14.x of Node, only
  3. Open a new pull request titled Improve CI for your change.

I'll respond when you open the pull request.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.