Skip to content

Commit d356fbd

Browse files
committed
Add Pull Request Title and Body
1 parent a0103e3 commit d356fbd

File tree

5 files changed

+92
-45
lines changed

5 files changed

+92
-45
lines changed

.github/workflows/meetups.yml

+3-2
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,14 @@ jobs:
3030
run: |
3131
echo "FORMATTED_DATE=$(date +'%B %d, %Y')" >> $GITHUB_ENV
3232
echo "BRANCH_TO_MERGE=new-meetups-$(date +'%Y-%m-%d')" >> $GITHUB_ENV
33+
echo "PULL_REQUEST_TITLE=$(cat ./pull_request_title.txt)" >> $GITHUB_ENV
3334
3435
- name: Commit New Meetups
3536
uses: stefanzweifel/git-auto-commit-action@v5
3637
with:
3738
# Optional. Commit message for the created commit.
3839
# Defaults to "Apply automatic changes"
39-
commit_message: New Meetups on ${{ env.FORMATTED_DATE }}
40+
commit_message: ${{ env.PULL_REQUEST_TITLE }}
4041

4142
# Optional. Local and remote branch name where commit is going to be pushed
4243
# to. Defaults to the current branch.
@@ -96,6 +97,6 @@ jobs:
9697
create_branch: true
9798

9899
- name: Create Pull Request
99-
run: gh pr create -B main -H ${{ env.BRANCH_TO_MERGE }} --title "New Meetups on ${{ env.FORMATTED_DATE }}" --body "Newly added Meetups on ${{ env.FORMATTED_DATE }}."
100+
run: gh pr create -B main -H ${{ env.BRANCH_TO_MERGE }} --title "${{ env.PULL_REQUEST_TITLE }}" --body-file "./new_meetups.md"
100101
env:
101102
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
_site
22
.jekyll-metadata
33
bin/
4+
new_meetups.md
5+
pull_request_title.txt

Rakefile

+37-2
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,45 @@ task :verify_meetups do
6969
end
7070

7171
task :fetch_meetups do
72-
MeetupGroup.all.each do |group|
73-
group.write_new_meetups!
72+
File.write("./new_meetups.md", <<~MD)
73+
### New Meetups on #{Date.today.strftime("%B %d, %Y")}
74+
75+
| Title | Date | Meetup Group |
76+
| ----- | ---- | ------------ |
77+
MD
78+
79+
new_events = []
80+
81+
MeetupGroup.meetupdotcom.each do |group|
82+
puts "Fetching Meetup.com Group: #{group.id}"
83+
84+
new_group_events = group.write_new_meetups!
85+
86+
new_events << new_group_events.zip(
87+
new_group_events.map { |event| group.openstruct_to_md(event) }
88+
)
89+
end
90+
91+
new_events = new_events.flatten(1).to_h
92+
93+
new_events.sort_by { |event, _md| event.dateTime }.each do |_event, md|
94+
File.write("./new_meetups.md", md, mode: "a+")
95+
end
96+
97+
new_meetups_from_groups = new_events.group_by { |event, md| event.group["name"] }.transform_values { |value| value.map(&:first) }
98+
99+
if new_meetups_from_groups.keys.count == 1
100+
pull_request_title = "Add #{new_meetups_from_groups.keys.first} #{Date.parse(new_meetups_from_groups.first.last.sort_by(&:dateTime).first.dateTime).strftime("%B %Y")} Meetup"
101+
elsif new_meetups_from_groups.keys.count > 1
102+
*groups, last = new_meetups_from_groups.keys
103+
pull_request_title = "Add #{groups.join(", ")} and #{last} Meetups"
104+
else
105+
pull_request_title = "New Meetups on #{Date.today.strftime("%B %d, %Y")}"
74106
end
75107

108+
puts "pull_request_title: #{pull_request_title}"
109+
File.write("./pull_request_title.txt", pull_request_title)
110+
76111
events = YAML.load_file("./_data/meetups.yml", permitted_classes: [Date])
77112

78113
events.sort_by! { |event| [event["date"], event["name"]] }

meetup_client.rb

+42-41
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,13 @@ def headers(context)
7171
createdAt
7272
eventType
7373
isOnline
74+
group {
75+
id
76+
name
77+
country
78+
state
79+
city
80+
}
7481
}
7582
}
7683
}
@@ -89,26 +96,6 @@ class MeetupGroup < FrozenRecord::Base
8996
scope :meetupdotcom, -> { where(service: "meetupdotcom" ) }
9097
scope :luma, -> { where(service: "luma" ) }
9198

92-
def location
93-
unless @upcoming_events_result
94-
upcoming_events
95-
end
96-
97-
group = @upcoming_events_result.original_hash.dig("data", "groupByUrlname")
98-
99-
city = group.dig("city")
100-
state = group.dig("state")
101-
country = group.dig("country")
102-
103-
country = ISO3166::Country.new(country)
104-
105-
if country.alpha2 == "US"
106-
"#{city}, #{state.upcase}"
107-
else
108-
"#{city}, #{country&.iso_short_name}"
109-
end
110-
end
111-
11299
def upcoming_events
113100
result = MeetupClient::Client.query(EventsQuery, variables: { groupId: id })
114101

@@ -142,41 +129,55 @@ def existing_event_ids
142129
end
143130

144131
def openstruct_to_yaml(event)
145-
city = event.venue.dig("city")
146-
state = event.venue.dig("state")
147-
country = event.venue.dig("country")
148-
149-
country = ISO3166::Country.new(country)
150-
151-
if event.isOnline
152-
meetup_location = "Online"
153-
elsif country.alpha2 == "US"
154-
meetup_location = "#{city}, #{state.upcase}"
155-
elsif country
156-
meetup_location = "#{city}, #{country&.iso_short_name}"
157-
else
158-
meetup_location = location
159-
end
160-
161132
timezone = TZInfo::Timezone.get(event.timezone).now.strftime("%Z")
162133

163134
<<~YAML
164-
- name: "#{name} - #{event.title.gsub(name, "").squeeze(" ").strip}"
165-
location: "#{meetup_location}"
135+
- name: "#{event_title(event)}"
136+
location: "#{event_to_location(event)}"
166137
date: #{Date.parse(event.dateTime).iso8601}
167138
start_time: "#{Time.parse(event.dateTime).strftime("%H:%M:%S")} #{timezone}"
168139
end_time: "#{Time.parse(event.endTime).strftime("%H:%M:%S")} #{timezone}"
169140
url: "#{event.eventUrl}"
170141
YAML
171142
end
172143

173-
def write_new_meetups!
174-
new_events.each do |event|
175-
next unless Date.parse(event.dateTime).between?(Date.today - 1, Date.today + 90)
144+
def openstruct_to_md(event)
145+
<<~MD
146+
| [#{event_title(event)}](#{event.eventUrl}) | #{Date.parse(event.dateTime).strftime("%b %d, %Y")} | [#{name}](https://www.meetup.com/#{id}) |
147+
MD
148+
end
176149

150+
def write_new_meetups!
151+
new_events.sort_by(&:dateTime).select { |event| Date.parse(event.dateTime).between?(Date.today - 1, Date.today + 90) }.each do |event|
177152
File.write("./_data/meetups.yml", openstruct_to_yaml(event), mode: "a+")
178153
end
179154
end
155+
156+
private
157+
158+
def event_title(event)
159+
"#{name} - #{event.title.gsub(name, "").squeeze(" ").strip}"
160+
end
161+
162+
def event_to_location(event)
163+
city = event.venue.dig("city") || event.group.dig("city")
164+
state = event.venue.dig("state") || event.group.dig("state")
165+
country_raw = event.venue.dig("country") || event.group.dig("country")
166+
167+
country = ISO3166::Country.new(country_raw)
168+
169+
if event.isOnline
170+
"Online"
171+
elsif country.alpha2 == "US"
172+
"#{city}, #{state.upcase}"
173+
elsif country
174+
"#{city}, #{country&.iso_short_name}"
175+
elsif city
176+
"#{city}, #{state}, #{country_raw.upcase}"
177+
else
178+
"Unknown"
179+
end
180+
end
180181
end
181182

182183
class Meetup < FrozenRecord::Base

meetup_graphql_schema.json

+8
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,14 @@
316316
"name": "Boolean"
317317
},
318318
"args": []
319+
},
320+
{
321+
"name": "group",
322+
"type": {
323+
"kind": "OBJECT",
324+
"name": "Group"
325+
},
326+
"args": []
319327
}
320328
]
321329
},

0 commit comments

Comments
 (0)