Coder Social home page Coder Social logo

hacktoberfest / hacktoberfest-2020 Goto Github PK

View Code? Open in Web Editor NEW
496.0 496.0 147.0 73.97 MB

Hacktoberfest - App to manage the annual open-source challenge, used for the 2019 & 2020 seasons.

Home Page: https://hacktoberfest.digitalocean.com

License: Other

Ruby 60.50% JavaScript 1.34% HTML 24.47% Shell 0.69% SCSS 12.79% Dockerfile 0.14% Makefile 0.07%
hacktoberfest ruby

hacktoberfest-2020's Issues

Publish FAQs

Publish FAQ's

FAQ's section will be available for pre-launch site.

  • Display FAQ's
    -FAQs content will come from Airtable

Segment User updating

Along with the events we will be sending, we should be updating the user information via identify method calls.

The following info should be sent to segment for users:

id
github name
open pull request count
state

Refactor PullRequest Service

  1. Remove all_by_state and score method
  2. Add mature? method to PullRequest model
  3. Use mature? method in matured_prs method
  4. Add eligible_prs and matured_prs method to be consistent with method names in the User model (minus count)
  5. Update User model to use new methods

Update tests accordingly

Logged-In user profile

As a participant in hacktoberfest, I want to be able to view my progress in near real-time.

TO-DO:

  • How many out of 4 PRs?
  • Install octokit ruby gem (octokit logic in UserScoreboard lib)
  • create a UserScoreboard library
  • call score library from profile action
  • implement GH API calls in UserScoreboard library

Fix copy on register page

Change copy to:
"To win a shirt, you must make four pull requests by October 31st. Everyone who participates receives limited-edition Hacktoberfest stickers - regardless if you complete the four pull requests or not."

Useful resources section

As a site admin, we should be able to add link and useful resources.

  • Fields will probably be a title and a link coming from CMS

Webinars section

Maintainer/Organizer/Participant Webinars

Have ability to schedule and accept RSVPS for webinars targeted for Maintainers/Organizers/Participants

  • Display upcoming webinars

  • List of webinars will come from AirTable

  • Webinar details to be displayed include:

    • title
    • key-takeaways (max of 5 bullet points)
    • date & time
    • CTA button/URL to register
  • Register for Webinars

    • Determine what form for webinar will contain
    • Determine where data will be stored
  • CTA button/URL to register

  • Email registration will post to Marketo with webinar id

  • Marketo will send notifications

  • Determine whether this will be a section or page

Maintainers can apply to showcase at webinar

Maintainers can apply to showcase their projects at a webinar via a form.

  • CTA for maintainers to showcase/pitch their projects through webinars or
    events

  • Apply to showcase your project

    • Determine if we will use Airtable for form
    • Determine fields for showcase form

List of participating repositories and issues

Hacktoberfest issues and repo displays will be personalized based on the user

TO-DO:

  • "Hacktoberfest” repo metadata - should be randomized, displaying different results each time you visit the page.

    • Balance of displayed repos- we should not show repos more than once.
  • Some ranking based on attributes like number of stars, watchers, and/or forks could- potentially be used to filter low quality/activity projects

    • Determine whether we will use Github trending API
  • Logged in users should receive personalized results specifically highlighting issues that contain:

    • code in languages with which they are familiar
  • Issues should be filterable by language

Repo / issue import takes query string arguent

Steps:

  • Move the content of our github:fetch_and_import_hacktoberfest_projects rake task into a service object.
  • Allow that service object to accept a query string param which is passed to the graphql search query
  • Create job that calls that service object
  • Create a rake task which does a search query for every programming language

Spammy repos

Steps:

  • Use the data from Repository.banned? to mark PRs as spammy and ineligible.
  • Ensure this is conveyed on the profile page

Setup rails cache

We must setup redis to be the rails cache since we are relying on our cache for Airtable requests to not hit the rate limit.

The Redis config should be extracted from the sidekiq initializer and used to both setup the rails cache and sidekiq.

Open Registration

Contest Active

  • Allow site admin to switch site onto "open registration"
    • ENV variable to switch on and off

TO-DO:

  • App is deployed to prod without domain
  • Switch DNS - cloud flare update to proper domain

Meetups/Events: Switch `Event Start Date/Time` to `Event Start Date`

There's a potential edge case issue where Airtable's inference of time zone in the datetime input could cause an event input as 2019-10-20 20:00 to be rendered as Oct 21. In order to avoid this, Kamal has already switched the Airtable form input to ask for Event Start Date (new column) instead of Event Start Date/Time (old column), and all previously submitted events have had the Event Start Date populated.

Now we need to switch it in the code.

What needs to change
On the meetups/events page, switch:

from OLD Airtable Column/Attribute:

  • Name: Event Start Date/Time
  • Type: DateTime

to NEW Airtable Column/Attribute:

  • Name: Event Start Date
  • Type: Date

Sign Up

Users will register for Hacktoberfest via GitHub oAuth
Sign-up flow includes:

  • Confirmations that they’ve read the rules / values

  • Email opt-in for Hacktoberfest and Digital Ocean open source topics

  • Determine if we will capture email or email from github.

Refactor segment Service

We need to change this to an after_transition so it's only called when the transition is successful: https://github.com/raise-dev/hacktoberfest/blob/master/app/models/user.rb#L46

Then this method should moved and called from a new service that is written in a before_transition so it updates always, in the case the transition was not successful and only in the appropriate states. This should be done a new service called UserPullRequestSegmentUpdator. https://github.com/raise-dev/hacktoberfest/blob/master/app/services/user_state_transition_segment_service.rb#L31-L33

In short, we need to send segment updated PR counts every time a transition is attempted (before_transition) and the tracking events, only when a successful transition is made (after_transition)

Transactional emails

Allow users to sign up for a notification for when Hacktoberfest begins.

  • User can opt-in for marketing emails

  • Background job for emails or client side

  • Store user information

    • Determine what user information to store
  • Implement the ability to send an email to the users

    • Determine if the app should send the email
    • Integrate with mailing list API
  • Users who don't opt-out of emails will receive emails with Marketo tool
    Note: mail merge

Issue filtering by language

Add a dropdown button on the homepage that will filter the projects by programming language.

  • Add dropdown button with programming languages
  • Ajax page update to replace the projects section without a full page reload
  • Show any currently applied filter
  • Remove filter button when a filter is applied

Profile page chronological

@fridaland - As we were discussing, we want the profile page to show the PRs in chronological order. Lets make sure that the PRs are sorted, and that each PR will have the following info:

PR

  • Datetime opened
  • title
  • truncated description
  • All labels
  • Hacktoberfest state (eligible, invalid, spammy)

Make sure missing data doesn't error out page renders

Current Behavior
This morning, new events in Airtable were published without "Event Start Date/Time" values being present.

As you can see from the controller, this will break it:
https://github.com/raise-dev/hacktoberfest/blob/master/app/controllers/pages_controller.rb#L24

Expected Behavior:
Make sure this controller, and all other page controllers and helper methods throughout the repository, set sane defaults for expected data structures or handles missing / malformed data packets more gracefully.

User transition processing

Each of the following will be done in separate PRs

  • Write TryUserTransitionFromRegistered service with tests #32
  • Write TryUserTransitionFromWaiting service with tests #33
  • Write TryUserTransition service with tests #34
  • Use TryUserTransition service from profile page #41
  • Write rake task to process all users in registered state #35
  • Write rake task for processing all users in waiting state #35
    1. Query to select all users in xyzzy state
  • Setup activejob #39
  • Write UserTransitionJob#39
  • Change rake task to use the job rather than the service #35

Meetup Organizers

Meetup Organizers:

As a meetup organizer, I will be able to view helpful resources that will be updated via AirTable

  • Resources

  • Resources for organizers

  • Instructions for organizers

Maintainers: Resources, instructions + Appreciation

Maintainers resources section

Major Hacktoberfest Contributors should get major appreciation

  • Resources for maintainers (AirTable)

  • Appreciation (TBD) :

  • If you are a maintainer that has been highly active supporting the community of a popular repository, you will be eligible to also receive a maintainer appreciation swag (likely pin).

  • Determine how many people get appreciation swag

  • Determine how we obtain eligible maintainers

Maintainers can apply to showcase their projects at a webinar via AirTable form.

  • CTA for maintainers to showcase/pitch their projects through webinars or
    events

  • Apply to showcase your project

    • Determine if we will use Airtable for form
    • Determine fields for showcase form

Import quality update code

Steps:

  • Import the code for calculating and updating the quality of issues/repos.
  • Setup a periodic job to run this

[Airbrake] [Production] undefined method `pullRequests' for nil:NilClass

Airbrake error: #7785
Airbrake project: Hacktoberfest

Error type: NoMethodError
Error message: undefined method `pullRequests' for nil:NilClass
Where: users#update
Occurred at: Sep 25, 2019 16:18:50 UTC
First seen at: Sep 25, 2019 16:18:05 UTC
Occurrences: 3 (0 since last deploy on <no information>)
Severity: error

URL: https://hacktoberfest.digitalocean.com/register
File: /PROJECT_ROOT/app/services/github_pull_request_service.rb

Backtrace:

/PROJECT_ROOT/app/services/github_pull_request_service.rb:38:in pull_requests
/PROJECT_ROOT/app/services/pull_request_service.rb:31:in github_pull_requests
/PROJECT_ROOT/app/services/pull_request_service.rb:15:in all
/PROJECT_ROOT/app/services/pull_request_service.rb:21:in eligible_prs

[Airbrake] [Production] Message must include a Sidekiq::Worker class, not class name: [TransitionAllUsersJob, ApplicationJob, ActiveJob::Base, Airbrake::Rails::ActiveJob, ActiveJob::Translation, ActiveJob::Logging, ActiveJob::Exceptions, ActiveJob::Cal...

Airbrake error: #1473
Airbrake project: Hacktoberfest

Error type: ArgumentError
Error message: Message must include a Sidekiq::Worker class, not class name: [TransitionAllUsersJob, ApplicationJob, ActiveJob::Base, Airbrake::Rails::ActiveJob, ActiveJob::Translation, ActiveJob::Logging, ActiveJob::Exceptions, ActiveJob::Callbacks, ActiveSupport::Callbacks, ActiveJob::Execution, ActiveSupport::Rescuable, ActiveJob::Enqueuing, ActiveJob::QueuePriority, ActiveJob::QueueName, ActiveJob::QueueAdapter, ActiveJob::Core, ActiveSupport::ToJsonWithActiveSupportEncoder, Object, PP::ObjectMixin, Act...
Where: sidekiq
Occurred at: Sep 27, 2019 01:00:04 UTC
First seen at: Sep 24, 2019 01:00:02 UTC
Occurrences: 30 (0 since last deploy on <no information>)
Severity: error

URL: <no information>
File: /GEM_ROOT/gems/sidekiq-5.2.7/lib/sidekiq/client.rb

Backtrace:

/GEM_ROOT/gems/sidekiq-5.2.7/lib/sidekiq/client.rb:236:in normalized_hash
/GEM_ROOT/gems/sidekiq-5.2.7/lib/sidekiq/client.rb:224:in normalize_item
/GEM_ROOT/gems/sidekiq-5.2.7/lib/sidekiq/client.rb:70:in push
/GEM_ROOT/gems/sidekiq-5.2.7/lib/sidekiq/client.rb:132:in push

Preserve FAQ order from Airtable

Currently, the FAQ items in each section appear to be pretty randomly ordered, which looks odd.

It'd be great if we could preserve the order that they are in, in Airtable, so that we have full control over the order they're presented in :)

Event Kit page fixes

  • Fix spacing between copy & button in “Promote your event”

  • Remove outer padding on “Promote your event” and pad each section (so image background doesn’t have a darker bg border)

  • Consider applying the tilt/popout effect to the sample image in “Promote your event”

Hacktoberfest Meetups page

List of meetups

A user will be able to see a list of Hacktoberfest meetups and have the ability to create a new event

  • Create page to list Hacktoberfest meetups
    • Determine if we will have a preview and page or just partial.
  • Ability to create a Hacktoberfest meetup
    • Determine if this will be done with AirTable
  • Store all meetup data

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.