getsentry / team-ospo

Open Source Program Office (OSPO)
https://open.sentry.io/
11 stars 1 forks source link

๐Ÿค‘ Run Fund Fest 2023 #108

Closed chadwhitacre closed 11 months ago

chadwhitacre commented 1 year ago

โ† 2022 | Notion๐Ÿ”’ | Sheet๐Ÿ”’ใƒปSheet 2๐Ÿ”’ | 2024 โ†’

Greetings!

Welcome to Sentry's annual Open Source Fund Fest for 2023! This program takes a lot of work to run and this issue is the central source of truth for coordinating all of the moving parts. This year our budget is $500,000, which is almost double last year. There are two key components to this year's edition:

  1. GitHub Sponsorsโ€”We are continuing our partnership with GitHub, and this year our goal is to become the first company to approach 100% coverage of all of our dependencies on Sponsors, across three orgs (gesentry, codecov, and syntaxfm). We are dedicating 10% of our budget to this, so these will be small amounts but lots of them and will show as coming directly from us. We expect a number of these to be the first sponsorship that people ever receive.

    Screenshot 2023-10-06 at 10 21 50 AMScreenshot 2023-10-06 at 10 21 14 AM

  2. Thanks.devโ€”We were a launch partner for this new platform last year, and our pilot project went so well that we have contracted with Thanks.dev to manage the bulk of our budget this year. The size and scope of our program is quite significant, and the product Thanks.dev is building and the level of expertise they are developing in this field make them an excellent partner for us. We're inventing the future together!
    ecosystem boost

Thanks.dev offers payouts through Stripe (0% additional fee) and Open Collective (10%) and is adding payouts through GitHub Sponsors for us (targeting the 3% fee tier). You will need to sign up on Thanks.dev if you want to receive more than the small amounts we're sending to everyone directly through GitHub Sponsors.

We're aiming to publish our wrap-up blog post on October 24. In the mean time, feel free to comment on this issue or reach out on ๐• with questions. Thank you to all of the maintainers who build the software Sentry depends on. ๐Ÿ™

FOSS Funders

While it is fun and exciting to run arguably the most comprehensive and robust program in the industry for really truly funding Open Source, the only way we're going to solve Open Source sustainability once and for all is for every company to step up and participate. Sentry is part of the FOSS Funders working group to drive this change. If your company has an Open Source funding story to tell, please join us!

To Do

Press

GitHub Sponsorships

  1. "A'ight, beat that. ๐Ÿ˜ค๐Ÿ˜๐Ÿ’ƒ" (chadwhitacre_)
  2. "I'm sorry, I don't make the rules. ๐Ÿญ" (chadwhitacre_)
  3. "Sentry is giving $500k+ to open source it relies on this year" (zeeg)
  4. "itโ€™s insane that people are anything other than thankful" (jarredsumner)
  5. "A company donates $500K/year in direct funding to OSS" (gergelyorosz)
  6. "YOU ARE A PIECE OF SHIT FOR NOT DONATING MORE OF YOUR VC FUNDING" (ThePrimeagen)

Announcement

  1. "We Just Gave $500,000 to Open Source Maintainers"
  2. X
  3. HN - 112 points and 36 comments despite being brutally modded at ~20 points - and then modded a second time! rankings
  4. /r/opensource/
  5. "It's the 2nd year in a row we've hit the front page only to have HN mods remove it." (bentlegen)
  6. "The answer I got last year (and kudos dang for the tone)" (chadwhitacre_)
  7. "Tarsnap has given 2^18 dollars to open source" (cperciva) - HN (not modded! ๐Ÿ˜ 390 / 180 / rankings) - X
chadwhitacre commented 1 year ago

Alright, slogging through the thick fog of confusion, hopefully emerging?

I've decided not to use StackAid this year, not seeing enough momentum and I need to focus my efforts. ๐Ÿญ

I really like what I see at Thanks.dev. It's basically a productization of the spreadsheet I've been using and the team has been super-responsive, basically building it to spec for me. โค๏ธ ๐Ÿ™

GitHub Sponsors is making gradual progress but is still quite cumbersome for a program at our scale, no-where near as useful as Thanks.dev.

OpenCollective is approximately as useful as GHS and the fees are higher, 10% vs. 3%.

Two years ago I wrote deps and did allocations manually. Last year I reran deps but also put a little through TD and SA as pilots. I didn't try to reconcile recipients and amounts between them, I just let the TD/SA money be free bonus extra cash dollar dough bucks. This year I would like to flip it:

  1. ~12k โ€” Achieve โ‰ฅ 99% coverage on GHS for getsentry, codecov, and syntaxfm, but with a limited dollar amount, basically just buying logo placement.
  2. ~120k โ€” Do some direct payments to foundations still, though a couple of these can be run through GHS or OC.
  3. ~368k โ€” Run the rest through Thanks.dev so we get nice weighting.

Needs from TD:

  1. Mix in sources besides package manifests (survey results, platforms, last year's recipients).
  2. Passthrough to OC/GHS where the recipient is not on TD (I guess with extra 3% or 10% haircut).
  3. Weighting by repo topic ([tag-production]())
  4. Think about slew?
  5. Concierge? ๐Ÿ˜…

Needs for TD:

  1. Security approval to install Thanks.dev on private repos (nice to have).
  2. Install Thanks.dev on all public repos.

For GitHub:

  1. Write a script to use the GraphQL API to create sponsorships.
chadwhitacre commented 1 year ago

I have $50k locked up in GHS right now, I should be able to use for PSF and DSF, not sure I'll be able to transfer to other orgs though.

chadwhitacre commented 1 year ago

Engaging with Thanks.dev. Sent in email:

  1. Thanks.dev (TD) administers Sentry's Open Source funding program for the year.
  2. $25k fee
  3. $475k to be allocated and disbursed via one-time or monthly recurring payouts
  4. $50k is already located in GitHub Sponsors (GHS), remainder ($425k) will be transferredย to TD, OC, GHS, or direct to project as necessary
  5. Recipients determined via automated dependency analysis in three GitHub orgs + additional lists (survey results, SDKs, prior year).
  6. Allocations weighted according to Sentry's priorities (orgs, repos, ecosystems, projects, recipients)
  7. Payout mechanisms include TD (0% additional fee), OC (10%), GitHub Sponsors (3%), and direct payments (0%) to a limited number of projects (~10).
  8. All funds disbursed (for one-time payouts) or configured (for monthly payouts) by Oct 10.

Let me know if we need to align further on details. Do you have an order form that we can start with? If not [we] can provide. I am seeing terms on your site, not sure if we can start there or what, will let [legal] drive from here.

Internal procurement ticket: https://getsentry.atlassian.net/servicedesk/customer/portal/15/PSD-294

chadwhitacre commented 1 year ago

@nehzata Can we use this ticket to coordinate the rest of our work together this year?

I believe the contract is in your hands to docusign. Once that is inked we are ready to run!

The the thanks-dev app is installed on getsentry, codecov, and syntaxfm. However, the @getsentry-funding account is not a member of the latter two orgs. I have a request in to @jeffrey-sentry to help out with that. I also seem to be having some trouble getting the account through our new SCIM workflow on the getsentry org as well, so I think we may be fully blocked on this.

I had a call with GitHub about transfering funds between the three orgs, I added a sheet to the spreadsheet ("GHS") with details, tl;dr targeting $4/maintainer/month across all three orgs. Need to investigate minimums in our set of maintainers and decide on our approach (easiest is to drop any maintainer with a minimum > $4/mo, but we have some flex if needed).

I also added contact emails for the foundations on the "Summary" tab. Feel free to start reaching out to folks and let me know if any of the target amounts do not line up with levels/expectations for this year. For Outreachy they work in 6-month intervals so the 20k will need to be 2 x 10k I think.

nehzata commented 1 year ago

Thanks @chadwhitacre! Contract is signed now. Exciting!

On our side we've nearly finished the manual inclusions process to support survey + sdk deps. We'll get the GH sponsors script sorted next and @anehzat will be starting with the foundations.

chadwhitacre commented 1 year ago

Sounds good. I am traveling today and all next week but I have my laptop, we're so async with timezones in the best of times that I doubt you'll notice much anyway, but in particular I will watch for email threads with foundations that @anehzat starts and chime in as needed. Thanks, @nehzata @anehzat! Good luck! ๐Ÿ˜ โ˜˜๏ธ ๐Ÿ™

chadwhitacre commented 1 year ago

lol should've checked my email first ... love you guys! ๐Ÿ˜

Screenshot 2023-09-15 at 4 08 35 PM
nehzata commented 1 year ago

Hi @jeffrey-sentry! Hope you're well.

Following @chadwhitacre's previous message re the app installation, we can confirm access to syntaxfm on our side but not getsentry & codecov.

Please let me know if there's anything we can do on our side to assist. ๐Ÿ™

jeffrey-sentry commented 1 year ago

@nehzata I do not have access to the codecov org, but I just checked the thanks.dev app permission setting for getsentry and it does have Read access to all repos. Is there anything else we need to do on our side beyond that?

Thanks!

chadwhitacre commented 1 year ago

Here are the repos I see when I login to thanks.dev using @getsentry-funding. I guess we need to do the dance to see codecov and getsentry there.

Screenshot 2023-09-19 at 7 19 01 PM
chadwhitacre commented 1 year ago

All three (plus mine and ... Isaac's!?) are associated with my personal GitHub account. ๐Ÿค”

Screenshot 2023-09-19 at 7 29 32 PM
chadwhitacre commented 1 year ago

Here's what I see when I try to configure the app using @getsentry-funding from the thanks.dev UI:


Screenshot 2023-09-19 at 7 32 02 PM
Screenshot 2023-09-19 at 7 32 08 PM
Screenshot 2023-09-19 at 7 31 07 PM
chadwhitacre commented 1 year ago

When I configure using my account I see that it is installed on all repos (for all three orgs).

Screenshot 2023-09-19 at 7 33 06 PM
chadwhitacre commented 1 year ago

@nehzata Was there a manual step last year on your side to get this wired up? I forget but have a vague recollection. Any thoughts on how to proceed?

nehzata commented 1 year ago

@chadwhitacre looks like for the Sentry org it expects us to manually select the repos individually. Last year we had a script running that would populate everything without requiring the app installation. That worked as all the repos we were interested in were public. If I understood correctly, this year there are private repos as well? If not shall we revert to the previous process?

nehzata commented 1 year ago

Just to clarify it seems we have the following options atm:

  1. Use last year's process (public repos only)
  2. Switch to gh/chadwhitacre profile
  3. Manually configure the repos for Sentry (by clicking on Sentry > Configure > "Only select repositories" and adding the relevant repos)
nehzata commented 1 year ago

@nehzata I do not have access to the codecov org, but I just checked the thanks.dev app permission setting for getsentry and it does have Read access to all repos. Is there anything else we need to do on our side beyond that?

Thanks!

Thanks for checking it out @jeffrey-sentry!

nehzata commented 1 year ago

@chadwhitacre We submitted a bug report with GitHub regarding the issacs entry and got the following response.

image

nehzata commented 1 year ago

@chadwhitacre First version of GH mass sponsorship app is ready to test here! :)

chadwhitacre commented 1 year ago

We submitted a bug report with GitHub regarding the issacs entry and got the following response.

What org am I a collaborator in that results in isaacs showing up in the list? I don't see isaacs on the list of orgs on https://github.com/apps/thanks-dev/installations/select_target, e.g. Feel free to cc me on the support ticket and I can connect with GH support directly.

First version of GH mass sponsorship app is ready to test here! :)

Dope! Looks like it's designed to run continuously, yes? Can I run it once to set up recurring monthly donations?

for the Sentry org it expects us to manually select the repos individually

Is it some config specific to the getsentry org that requires this? How about codecov? I have the app set to "all repos" in both orgs (as well as syntaxfm) so I am wondering where specifically we are tripped up here.

nehzata commented 1 year ago

What org am I a collaborator in that results in isaacs showing up in the list? I don't see isaacs on the list of orgs on https://github.com/apps/thanks-dev/installations/select_target, e.g. Feel free to cc me on the support ticket and I can connect with GH support directly.

The original ticket is closed as it's from Nov last year. I did some further digging into this and looks like the following is happening:

We've come across many such disconnects between token scopes in the App installation API & GraphQL API unfortunately...

curl -s -H 'authorization: bearer <TOKEN>' https://api.github.com/repos/isaacs/github/collaborators | jq '. | map(.login)'
[
  "schacon",
  "wfarr",
  "clarkbw",
  "holman",
  "isaacs",
  "haacked",
  "aspiers",
  **"chadwhitacre"**,
  "tjfontaine",
  "TPS",
  "dreww",
  "broccolini",
  "joernhees",
  "jlord",
  "cirosantilli",
  "yoannchaudet",
  "michellemerrill"
]

First version of GH mass sponsorship app is ready to test here! :)

Dope! Looks like it's designed to run continuously, yes? Can I run it once to set up recurring monthly donations?

Yes it currently runs continuously to cater for network failures + GH access token rate limiting. Recurring donations may be possible but we don't know if it works yet as the corresponding monthly/yearly setting are not present in the API. We've asked in GH community forums. Should be a one or two line change.

Let's do a quick code review + test to confirm once you're back online please?

for the Sentry org it expects us to manually select the repos individually

Is it some config specific to the getsentry org that requires this? How about codecov? I have the app set to "all repos" in both orgs (as well as syntaxfm) so I am wondering where specifically we are tripped up here.

Not really sure. Let's go over it on a call when you're back to see if anything sticks out please? In the meantime we've started working based on the @chadwhitacre account that has correct access to unblock ourselves for now.

Finally, looks like @anehzat has the foundations mostly covered. We plan to have a first draft of distributions for your review next week.

chadwhitacre commented 1 year ago

You're a collaborator on github.com/isaacs/github

Thanks for digging, I've opened a new support ticket๐Ÿ”’ with GitHub to be removed as a collaborator from that repo. It is now archived, and I can't find in the UI where to remove myself.

We've asked in GH community forums.

Gotcha. I've asked my contact at GitHub Sponsors in email to see if we can get an answer here.

Let's do a quick code review + test to confirm once you're back online please? Not really sure. Let's go over it on a call

Sounds good, let's aim for the first part of next week, will drop to email to schedule. ๐Ÿ‘

nehzata commented 1 year ago

Awesome! First invoice has been emailed btw.

Hope you're having a great time!

nehzata commented 12 months ago

@chadwhitacre as discussed, these are the only installations currently present for getsentry-funding user.

curl -s -H 'authorization: bearer <TOKEN>' https://api.github.com/user/installations | jq '.installations | map(.account.login)'
[
  "getsentry-funding",
  "syntaxfm"
]
chadwhitacre commented 12 months ago
chadwhitacre commented 12 months ago

Invoice is approved and should get paid tomorrow. ๐Ÿ‘

nehzata commented 12 months ago

utils (formerly wkr-gh-sponsor) is now updated. Doesn't need the csv file. It instead scrapes all the dependencies from GH API.

To run locally (donation disabled): . bin/activate-hermit GH_CLASSIC_ACCESS_TOKEN=<TOKEN> ./scripts/wkr-gh-sponsor --config example.config.json

chadwhitacre commented 12 months ago

these are the only installations currently present for getsentry-funding user.

curl -s -H 'authorization: bearer <TOKEN>' https://api.github.com/user/installations | jq '.installations | map(.account.login)'
[
  "getsentry-funding",
  "syntaxfm"
]

@jeffrey-sentry Any ideas on this one? The user/installations endpoint returns syntaxfm for the @getsentry-funding account, but in order to use that account (rather than, e.g., my own account) we need it to also return getsentry and codecov. Nothing obvious is jumping out at me when I compare:

Do both codecov and getsentry use SCIM? Something to do with that, maybe? ๐Ÿค”

chadwhitacre commented 12 months ago

A clue! There is a "Member privileges" settings page, and I find a "Base permissions" knob at the top:

Screenshot 2023-09-27 at 10 44 31 AM

โ˜๏ธ That's for syntaxfm. For getsentry and codecov this option is set to "No permission". ๐Ÿ˜ฑ

Screenshot 2023-09-27 at 10 45 28 AM

Does this maybe interact with the user/installations API endpoint? ๐Ÿค” I don't want to change the setting permanently, but maybe we could toggle it off temporarily in syntaxfm to see if it impacts the endpoint?

chadwhitacre commented 12 months ago

@nehzata Let's do this on a call. I've uninstalled the thanks-dev app from syntaxfm, but it's still showing up in the settings page for @getsentry-funding. My hunch is that you can do something on your end to remove that connection in Thanks.dev, then I can re-add with the base permission turned off in syntaxfm to test my hypothesis. That'll probably be most efficient in realtime, so I've sent an invite for later today/tomorrow. In the mean time I've opened a support request๐Ÿ”’ with GitHub, since if this is true we'll need some workaround since we shouldn't set base perms in codecov and getsentry.

nehzata commented 12 months ago

@chadwhitacre meeting confirmed.

GH is still returning syntaxfm:

curl -s -H 'authorization: bearer <TOKEN>' https://api.github.com/user | jq .login

"getsentry-funding"
curl -s -H 'authorization: bearer <TOKEN>' https://api.github.com/user/installations | jq '.installations | map({id:.id, login:.account.login})'
[
  {
    "id": 32259457,
    "login": "getsentry-funding"
  },
  {
    "id": 42286928,
    "login": "syntaxfm"
  }
]
curl -s -H 'authorization: bearer <TOKEN>' https://api.github.com/user/installations/42286928/repositories | jq '.repositories | map(.name)'
[
  ".github",
  "brand",
  "giveaway",
  "hackweek-md-multiplayer-editor",
  "meta",
  "vscode-theme",
  "website"
]
chadwhitacre commented 12 months ago

We confirmed in real time that the hypothesis is correct: we need either "Owner" role on the user account or "Read" base perms for the org in order for the user/installations API to include a given org. We also confirmed that installing the app for only some repos vs. all repos does not make a difference. Assuming GitHub does not get back with a workaround on my support request, our options seem to be:

  1. Use @chadwhitacre (already owner on all three orgs).
  2. Grant @getsentry-funding the owner role.
  3. Change the base permissions to Read in getsentry and codecov.

Thoughts on how to proceed @jeffrey-sentry @mdtro? Since the thanks-dev app only has read permissions, iirc using a separate low-privilege account was really a defense-in-depth, yes? I think option (1) may be the least disruptive/risky path forward, assuming no workaround. Can we live with this?

chadwhitacre commented 12 months ago

Just saw this come through! ๐Ÿ’ƒ

The payment for invoice 0120 was initiated on Sep 27, 2023. We notified Thanks Dev Pty Ltd of the payment initiation. The payment should reach the vendorโ€™s bank account in 4-5 business days from the day of this email.

nehzata commented 12 months ago

Excellent!

auto-boost added to utils as well.

nehzata commented 11 months ago

Inclusions have been uploaded to both @chadwhitacre & @getsentry-funding accounts

chadwhitacre commented 11 months ago

Okay so in my court:

I've pinged our security team internally on the first one.

chadwhitacre commented 11 months ago

if we can differentiate activities from thanks.dev and activities that's performed by you in logs, then I think it's fine to use option 1

chadwhitacre commented 11 months ago

Independently, we're in the process of rolling our GH orgs up into a GH enterprise(!). The timing is fortuitous, since it interacts with sponsor accounts. tl;dr I'll have a little dancing to do in their UI before I am ready to configure our new sponsorships.

chadwhitacre commented 11 months ago

Finding this clue:

Similarly, if the request triggers a corresponding entry in the audit logs and security logs, the logs will list the user as the actor but will state that the "programmatic_access_type" is "GitHub App user-to-server token".

Looks like we can't filter on programmatic_access_type in the audit UI. I've kicked off an export to see if this key shows up in our existing audit log at all.

chadwhitacre commented 11 months ago

With help from my Security team, I was able to inspect the audit logs. The programmatic_access_type key is present as documented, and additionally there is a "name" field that seems to list the app in question. This gives us what we need to detect any unexpected behavior from the app.

chadwhitacre commented 11 months ago

@nehzata I'm sure you've already addressed this ... Could the Thanks.dev GH App use installation auth instead of user auth?

mdtro commented 11 months ago

@nehzata , ๐Ÿ‘‹ I'm a part of the Sentry security team. @chadwhitacre Sorry for all the telephone and having you play mediator. ๐Ÿ˜…

I was reading the ToS to try and get some more detail about how thanks.dev works and is possibly architected. I fully understand you'll need to pull down our code to analyze it, but is it possible to get more clarification as to what is stored long-term on your systems? Questions below.

From the ToS:

The data we collect from your during the course of providing our Service will be stored according to industry standards. We perform routine backups of our systems and data, however we do not warrant these backups and you should not rely on them for your business continuity.

  1. What data is stored? Everything from the repository or just package manifest files?
  2. How is the data stored? ie. is the data stored on cloud storage and is the data encrypted?
  3. Are backups encrypted and how long are they retained?
  4. If the Thanks.dev app is ever deauthorized from the organization, is associated data deleted including backups?
nehzata commented 11 months ago

Hi @mdtro ! Thanks for looking into this. Response to questions are below. Please let me know if any other parts need clarification.

The data we collect from your during the course of providing our Service will be stored according to industry standards. We perform routine backups of our systems and data, however we do not warrant these backups and you should not rely on them for your business continuity.

  1. What data is stored? Everything from the repository or just package manifest files?

We only read the manifest files listed here.

  1. How is the data stored? ie. is the data stored on cloud storage and is the data encrypted?

It is stored in our DB backed by an encrypted EBS in a private EKS cluster. The EKS cluster is configured with role based permissions via IAM roles.

  1. Are backups encrypted and how long are they retained?

Backups are encrypted on S3. The manifest files + dependency trees are not stored in backups though. We only backup the following DBs:

Everything else will automatically get reanimated in the case of DR. Storage costs would be prohibitive otherwise.

We retain last 30 days via S3 lifecycle policies.

  1. If the Thanks.dev app is ever deauthorized from the organization, is associated data deleted including backups?

We're not presently deleting any data automatically. In the event of a deauthorization we just detect access has been revoked and stop trying to read the manifest files + updating the dependency tree.

However, we do have the ability to manually handle CCPA and equivalent data deletion requests should there be a need.

nehzata commented 11 months ago

@nehzata I'm sure you've already addressed this ... Could the Thanks.dev GH App use installation auth instead of user auth?

@chadwhitacre We don't currently obtain an installation token. Let us look into it and get back to you please.

If I've understood correctly, this would be to differentiate thanks.dev activity from your own activity in the audit logs right?

nehzata commented 11 months ago

@chadwhitacre Can we jump on a quick call please to confirm which repos will be included in the dep tree? We'll then be able to do the final export for onboarding. Same time as usual if it's ok with you? ๐Ÿ™

chadwhitacre commented 11 months ago

If I've understood correctly, this would be to differentiate thanks.dev activity from your own activity in the audit logs right?

Yes, and in general to decouple app activity from my user account.

chadwhitacre commented 11 months ago

Can we jump on a quick call please [...] Same time as usual if it's ok with you? ๐Ÿ™

Of course, sent for your Thursday AM.

to confirm which repos will be included in the dep tree? We'll then be able to do the final export for onboarding.

My intention is to include all repos for all three orgs (weighted differently, of course). Is this enough to unblock?

chadwhitacre commented 11 months ago

Ftr looks like we found time to meet today/tonight.

Also, our orgs are now consolidated into an enterprise, ready to proceed with mass-gh-sponsor. ๐Ÿ‘

mdtro commented 11 months ago

Hi @mdtro ! Thanks for looking into this. Response to questions are below. Please let me know if any other parts need clarification.

The data we collect from your during the course of providing our Service will be stored according to industry standards. We perform routine backups of our systems and data, however we do not warrant these backups and you should not rely on them for your business continuity.

  1. What data is stored? Everything from the repository or just package manifest files?

We only read the manifest files listed here.

  1. How is the data stored? ie. is the data stored on cloud storage and is the data encrypted?

It is stored in our DB backed by an encrypted EBS in a private EKS cluster. The EKS cluster is configured with role based permissions via IAM roles.

  1. Are backups encrypted and how long are they retained?

Backups are encrypted on S3. The manifest files + dependency trees are not stored in backups though. We only backup the following DBs:

  • users db
  • settings db
  • accounting db (donations, balances etc)

Everything else will automatically get reanimated in the case of DR. Storage costs would be prohibitive otherwise.

We retain last 30 days via S3 lifecycle policies.

  1. If the Thanks.dev app is ever deauthorized from the organization, is associated data deleted including backups?

We're not presently deleting any data automatically. In the event of a deauthorization we just detect access has been revoked and stop trying to read the manifest files + updating the dependency tree.

However, we do have the ability to manually handle CCPA and equivalent data deletion requests should there be a need.

@nehzata Thank you for the answers! When you say "you only read manifest files", does that mean that's all that is stored? Or is the entire repo stored, just only those particular files are searched for and read?

nehzata commented 11 months ago

@mdtro Apologies for not being clear. We only download and store the manifest files. More specifically we: