# Getting Involved

LLVM welcomes contributions of all kinds. To get started, please review the following topics:


```{toctree}
:hidden:

Contributing
DeveloperPolicy
CodeReview
SupportPolicy
SphinxQuickstartTemplate
HowToSubmitABug
BugLifeCycle
CodingStandards
GitBisecting
GitRepositoryPolicy
```

* {doc}`Contributing`

  An overview on how to contribute to LLVM.

* {doc}`DeveloperPolicy`

  The LLVM project's policy towards developers and their contributions.

* {doc}`CodeReview`

  The LLVM project's code-review process.

* {doc}`SupportPolicy`

  The LLVM support policy for core and non-core components.

* {doc}`SphinxQuickstartTemplate`

  A template + tutorial for writing new Sphinx documentation. It is meant
  to be read in source form.

* {doc}`HowToSubmitABug`

  Instructions for properly submitting information about any bugs you run into
  in the LLVM system.

* {doc}`BugLifeCycle`

  Describes how bugs are reported, triaged, and closed.

* {doc}`CodingStandards`

  Details the LLVM coding standards and provides useful information on writing
  efficient C++ code.

* {doc}`GitHub`

  Describes how to use the llvm-project repository and code reviews on GitHub.

* {doc}`GitBisecting`

  Describes how to use `git bisect` on LLVM's repository.

* {doc}`GitRepositoryPolicy`

  Collection of policies around the git repositories.

(development-process)=

## Development Process

Information about LLVM's development process.

```{toctree}
:hidden:

Projects
HowToReleaseLLVM
ReleaseProcess
HowToAddABuilder
ReleaseNotes
```

* {doc}`Projects`

  How-to guide and templates for new projects that *use* the LLVM
  infrastructure.  The templates (directory organization, Makefiles, and test
  tree) allow the project code to be located outside (or inside) the `llvm/`
  tree, while using LLVM header files and libraries.

* {doc}`HowToReleaseLLVM`

  This is a guide to preparing LLVM releases. Most developers can ignore it.

* {doc}`ReleaseProcess`

  This is a guide to validate a new release, during the release process. Most developers can ignore it.

* {doc}`HowToAddABuilder`

  Instructions for adding new builder to LLVM buildbot master.

* {doc}`Release notes for the current release <ReleaseNotes>`

  This describes new features, known bugs, and other limitations.

(lists-forums)=

## Forums & Mailing Lists

If you can't find what you need in these docs, try consulting the
Discourse forums. There are also commit mailing lists for all commits to the LLVM Project.
The {doc}`CodeOfConduct` applies to all these forums and mailing lists.

* [LLVM Discourse](https://discourse.llvm.org/)

  The forums for all things LLVM and related sub-projects. There are categories and subcategories for a wide variety of areas within LLVM. You can also view tags or search for a specific topic.

* [Commits Archive (llvm-commits)](http://lists.llvm.org/pipermail/llvm-commits/)

  This list contains all commit messages that are made when LLVM developers
  commit code changes to the repository. It also serves as a forum for
  patch review (i.e., send patches here). It is useful for those who want to
  stay on the bleeding edge of LLVM development. This list is very high
  volume.

* [Bugs & Patches Archive (llvm-bugs)](http://lists.llvm.org/pipermail/llvm-bugs/)

  This list gets emailed every time a bug is opened and closed. It is
  higher volume than the LLVM-dev list.

* [LLVM Announcements](https://discourse.llvm.org/c/announce/46)

  If you just want project-wide announcements such as releases, developers meetings, or blog posts, then you should check out the Announcement category on LLVM Discourse.

(online-sync-ups)=

## Online Sync-Ups

A number of regular calls are organized on specific topics. It should be
expected that the range of topics will change over time. At the time of
writing, the following sync-ups are organized.
The {doc}`CodeOfConduct` applies to all online sync-ups.

If you'd like to organize a new sync-up, please add the info in the table
below. Please also create a calendar event for it and invite calendar@llvm.org
to the event, so that it'll show up on the {ref}`llvm-community-calendar`.
Please see {ref}`llvm-community-calendar-host-guidance` for more guidance on
what to add to your calendar invite.

```{list-table} LLVM regular sync-up calls
:widths: 25 25 25 25
:header-rows: 1

   * - Topic
     - Frequency
     - Calendar link
     - Minutes/docs link
   * - Loop Optimization Working Group
     - Every first Wednesday of the month
     - [ics](./_static/LoopOptWG_invite.ics)
     - [Minutes/docs](https://docs.google.com/document/d/1sdzoyB11s0ccTZ3fobqctDpgJmRoFcz0sviKxqczs4g/edit)
   * - RISC-V
     - Every 2 weeks on Thursday
     - [ics](https://calendar.google.com/calendar/ical/lowrisc.org_0n5pkesfjcnp0bh5hps1p0bd80%40group.calendar.google.com/public/basic.ics)
       [gcal](https://calendar.google.com/calendar/b/1?cid=bG93cmlzYy5vcmdfMG41cGtlc2ZqY25wMGJoNWhwczFwMGJkODBAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ)
     - [Minutes/docs](https://docs.google.com/document/d/1G3ocHm2zE6AYTS2N3_3w2UxFnSEyKkcF57siLWe-NVs)
   * - ML Guided Compiler Optimizations
     - Monthly
     -
     - [Minutes/docs](https://docs.google.com/document/d/1JecbplF09l3swTjze-UVeLh4L48svJxGVy4mz_e9Rhs/edit?usp=gmail#heading=h.ts9cmcjbir1j)
   * - [LLVM security group](Security.md)
     - Monthly, every 3rd Tuesday
     - [ics](https://calendar.google.com/calendar/ical/eoh3m9k1l6vqbd1fkp94fv5q74%40group.calendar.google.com/public/basic.ics)
       [gcal](https://calendar.google.com/calendar/embed?src=eoh3m9k1l6vqbd1fkp94fv5q74%40group.calendar.google.com)
     - [Minutes/docs](https://discourse.llvm.org/t/llvm-security-group-public-sync-ups/62735)
   * - [CIRCT](https://github.com/llvm/circt)
     - Weekly, on Wednesday
     -
     - [Minutes/docs](https://docs.google.com/document/d/1fOSRdyZR2w75D87yU2Ma9h2-_lEPL4NxvhJGJd-s5pk/edit#heading=h.mulvhjtr8dk9)
   * - flang
     - Multiple meeting series, [documented here](https://github.com/llvm/llvm-project/blob/main/flang/docs/GettingInvolved.md#calls)
     -
     -
   * - OpenMP
     - Multiple meeting series, [documented here](https://openmp.llvm.org/docs/SupportAndFAQ.html)
     -
     -
   * - LLVM Alias Analysis
     - Every 4 weeks on Tuesdays
     - [ics](http://lists.llvm.org/pipermail/llvm-dev/attachments/20201103/a3499a67/attachment-0001.ics)
     - [Minutes/docs](https://docs.google.com/document/d/17U-WvX8qyKc3S36YUKr3xfF-GHunWyYowXbxEdpHscw)
   * - LLVM Pointer Authentication
     - Every month on Mondays
     - [ics](https://calendar.google.com/calendar/ical/fr1qtmrmt2s9odufjvurkb6j70%40group.calendar.google.com/public/basic.ics)
     - [Minutes/docs](https://discourse.llvm.org/t/llvm-pointer-authentication-sync-ups/62661)
   * - LLVM Embedded Toolchains
     - Every 4 weeks on Thursdays
     - [ics](https://drive.google.com/file/d/1uNa-PFYkhAfT83kR2Nc4Fi706TAQFBEL/view?usp=sharing)
       [gcal](https://calendar.google.com/calendar/u/0?cid=ZDQyc3ZlajJmbjIzNG1jaTUybjFsdjA2dWNAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ)
     - [Minutes/docs](https://docs.google.com/document/d/1GahxppHJ7o1O_fn1Mbidu1DHEg7V2aOr92LXCtNV1_o/edit?usp=sharing)
   * - Clang C and C++ Language Working Group
     - 1st and 3rd Wednesday of the month
     -
     - [Minutes/docs](https://docs.google.com/document/d/1x5-RbOC6-jnI_NcJ9Dp4pSmGhhNe7lUevuWUIB46TeM/edit?usp=sharing)
   * - LLVM SPIR-V Backend Working Group
     - Every week on Monday
     -
     - [Meeting details/agenda](https://docs.google.com/document/d/1UjX-LAwPjJ75Nmb8a5jz-Qrm-pPtKtQw0k1S1Lop9jU/edit?usp=sharing)
   * - SYCL Upstream Working Group
     - Every 2 weeks on Mondays
     - [gcal](https://calendar.google.com/calendar/u/0?cid=c3ljbC5sbHZtLndnQGdtYWlsLmNvbQ)
     - [Meeting details/agenda](https://docs.google.com/document/d/1ivYDSn_5ChTeiZ7TiO64WC_jYJnGwAUiT9Ngi9cAdFU/edit?usp=sharing)
   * - Formal Semantics Working Group
     - Every 2 weeks on Mondays
     - [gcal](https://calendar.google.com/calendar/event?eid=aHJpNnNzb3Zia3FtNzNuYjdpbmJtZG5nZGVfMjAyNjA1MDRUMTUzMDAwWiBjYWxlbmRhckBsbHZtLm9yZw)
     - [Meeting notes](https://docs.google.com/document/d/1muS2gZ7PUhbypbl0bmjb2J-UUzY7K8AO9a8RHVw_Mjo/edit?tab=t.0)
   * - Vectorizer Improvement Working Group
     - 3rd Tuesday of the month
     - [ics](https://www.icloud.com/iclouddrive/032PeZzdN6U4uRMwJRJPrS2Lw#Vectorizer_Improvements)
     - [Meeting details/agenda:](https://docs.google.com/document/d/1Glzy2JiWuysbD-HBWGUOkZqT09GJ4_Ljodr0lXD5XfQ/edit)
   * - [LLVM Qualification Working Group](QualGroup.md)
     - Monthly: 2nd Tuesday (EU/Asia) and 2nd Friday JST / Thursday (Americas)
     - [ics](https://calendar.google.com/calendar/ical/f731f5b57956a132f6c553ed30f496b16e1018f831be13eb6c4b896c108a6626%40group.calendar.google.com/public/basic.ics)
       [gcal](https://calendar.google.com/calendar/embed?src=f731f5b57956a132f6c553ed30f496b16e1018f831be13eb6c4b896c108a6626%40group.calendar.google.com&ctz=Asia%2FTokyo)
     - [Minutes/docs](https://discourse.llvm.org/t/llvm-qualification-wg-sync-ups-meeting-minutes/87148)
   * - MLIR C/C++ Frontend Working Group
     - Monthly, usually 1st Monday of the month
     - [ics](https://calendar.google.com/calendar/ical/jvceakm3kbpku3f4jrsv1lkigo%40group.calendar.google.com/public/basic.ics)
       [gcal](https://calendar.google.com/calendar/embed?src=jvceakm3kbpku3f4jrsv1lkigo%40group.calendar.google.com&ctz=America%2FLos_Angeles)
     - [Minutes/docs](https://docs.google.com/document/d/1-flHK3TjQUrkSO2Fdt4webZ2zCyeXxpTLMiRQbMW7hE)
   * - ClangIR Upstreaming Coordination Meeting
     - Every 2 weeks on Mondays
     - [ics](https://calendar.google.com/calendar/ical/c_673c6cd64474c0aff173bf8fa609559f93d654e0984d9d91d71abd32d28c0486%40group.calendar.google.com/public/basic.ics)
       [gcal](https://calendar.google.com/calendar/embed?src=c_673c6cd64474c0aff173bf8fa609559f93d654e0984d9d91d71abd32d28c0486%40group.calendar.google.com&ctz=America%2FLos_Angeles)
     -
   * - GlobalISel
     - Every 2nd Tuesday of the month
     - [gcal](https://calendar.google.com/calendar/u/0?cid=YWZjNzhmMzE4MDNlNTAyNGY1NmE1MDIyODY0YTYwZmJmYzRjYTEwNTE1NmUxODA2NzBkYTliY2ZhYTVkNjk0NUBncm91cC5jYWxlbmRhci5nb29nbGUuY29t)
     - [Meeting details/agenda](https://docs.google.com/document/d/1Ry8O4-Tm5BFj9AMjr8qTQFU80z-ptiNQ62687NaIvLs/edit?usp=sharing)
   * - Clang Static Analysis Working Group
     - Every 2 weeks on Tuesdays
     - [ics](https://calendar.google.com/calendar/ical/9c23f3a54dbb4fbac3801c50094fc43118a37c186f5c65b2898cd0fc251c8610%40group.calendar.google.com/public/basic.ics)
       [gcal](https://calendar.google.com/calendar/u/0?cid=OWMyM2YzYTU0ZGJiNGZiYWMzODAxYzUwMDk0ZmM0MzExOGEzN2MxODZmNWM2NWIyODk4Y2QwZmMyNTFjODYxMEBncm91cC5jYWxlbmRhci5nb29nbGUuY29t)
     - [Meeting notes](https://docs.google.com/document/d/1ijI8pWeyidmhFOd5Ndgvr5AziZwrMCbt2oUehv8qHmw/edit?usp=sharing)
   * - LLVM Memory Safety Working Group
     - Every 4 weeks on Thursdays
     - [ics](https://calendar.google.com/calendar/ical/2d77f9a2624d18cd46e5299d15cc0fa0c90dca53fd68802261d52121d21a0573%40group.calendar.google.com/public/basic.ics)
       [gcal](https://calendar.google.com/calendar/u/0?cid=MmQ3N2Y5YTI2MjRkMThjZDQ2ZTUyOTlkMTVjYzBmYTBjOTBkY2E1M2ZkNjg4MDIyNjFkNTIxMjFkMjFhMDU3M0Bncm91cC5jYWxlbmRhci5nb29nbGUuY29t)
     - [Meeting notes](https://docs.google.com/document/d/1DkCik6BTnO-cox_9y_BTKzPaJJOo_hBxiNFP3lInvOM/edit?usp=sharing)
   * - [Lifetime Safety Breakout Group](https://github.com/orgs/llvm/projects/39)
     - Every 2 weeks on Wednesdays
     - [ics](https://calendar.google.com/calendar/ical/2d77f9a2624d18cd46e5299d15cc0fa0c90dca53fd68802261d52121d21a0573%40group.calendar.google.com/public/basic.ics)
       [gcal](https://calendar.google.com/calendar/u/0?cid=MmQ3N2Y5YTI2MjRkMThjZDQ2ZTUyOTlkMTVjYzBmYTBjOTBkY2E1M2ZkNjg4MDIyNjFkNTIxMjFkMjFhMDU3M0Bncm91cC5jYWxlbmRhci5nb29nbGUuY29t)
     - [Meeting notes](https://docs.google.com/document/d/1DkCik6BTnO-cox_9y_BTKzPaJJOo_hBxiNFP3lInvOM/edit?tab=t.nvvd6cfloi81)
   * - [HLSL Working Group](https://github.com/llvm/wg-hlsl)
     - Every week on Thursday
     -
     - [Meeting notes](https://github.com/llvm/wg-hlsl/tree/main/meetings)
   * - BOLT
     - Monthly, 2nd Wednesday of the month at 11:00am PT
     - [gcal](https://calendar.google.com/calendar/u/0/event?eid=ZjIzMGRsOTFpdWZ0MWkxYjB0M2QzamxtcmRfMjAyNjA5MDlUMTgwMDAwWiBjYWxlbmRhckBsbHZtLm9yZw)
     - [Meeting notes/agenda](https://docs.google.com/document/d/17Ivx8tyvUkRT3h78RJSQdDabAtBvpbtGQI-atdPmXE8/edit?usp=sharing)
```

For event owners, our Discord bot also supports sending automated announcements
of upcoming sync-ups. Please see the {ref}`discord-bot-event-pings` section for
info.

### Past online sync-ups

Some online sync-ups are no longer happening. We keep pointing to them here to
keep track of the meeting notes and in case anyone would want to revive them in
the future.

```{list-table} LLVM no-longer-happening sync-up calls
:widths: 25 25 25 25
:header-rows: 1

   * - Topic
     - Frequency
     - Calendar link
     - Minutes/docs link
   * - Scalable Vectors and Arm SVE
     - Monthly, every 3rd Tuesday
     - [ics](https://calendar.google.com/calendar/ical/bjms39pe6k6bo5egtsp7don414%40group.calendar.google.com/public/basic.ics)
       [gcal](https://calendar.google.com/calendar/u/0/embed?src=bjms39pe6k6bo5egtsp7don414@group.calendar.google.com)
     - [Minutes/docs](https://docs.google.com/document/d/1UPH2Hzou5RgGT8XfO39OmVXKEibWPfdYLELSaHr3xzo/edit)
   * - MemorySSA in LLVM
     - Every 8 weeks on Mondays
     - [ics](https://calendar.google.com/calendar/ical/c_1mincouiltpa24ac14of14lhi4%40group.calendar.google.com/public/basic.ics)
       [gcal](https://calendar.google.com/calendar/embed?src=c_1mincouiltpa24ac14of14lhi4%40group.calendar.google.com)
     - [Minutes/docs](https://docs.google.com/document/d/1-uEEZfmRdPThZlctOq9eXlmUaSSAAi8oKxhrPY_lpjk/edit#)
   * - Vector Predication
     - Every 2 weeks on Tuesdays, 3pm UTC
     -
     - [Minutes/docs](https://docs.google.com/document/d/1q26ToudQjnqN5x31zk8zgq_s0lem1-BF8pQmciLa4k8/edit?usp=sharing)
   * - [MLIR](https://mlir.llvm.org) design meetings
     - Weekly, on Thursdays
     -
     - [Minutes/docs](https://docs.google.com/document/d/1y_9f1AbfgcoVdJh4_aM6-BaSHvrHl8zuA5G4jv_94K8/edit#heading=h.cite1kolful9)
```

(office-hours)=

## Office hours

A number of experienced LLVM contributors make themselves available for a chat
on a regular schedule, to anyone who is looking for some guidance. Please find
the list of who is available when, through which medium, and what their area of
expertise is. Don't be too shy to dial in!

Office hours are also listed on the {ref}`llvm-community-calendar`. Of course,
people take time off from time to time, so if you dial in and you don't find
anyone present, chances are they happen to be off that day.

The {doc}`CodeOfConduct` applies to all office hours.

```{list-table} LLVM office hours
:widths: 15 40 15 15 15
:header-rows: 1

  * - Name
    - In-scope topics
    - When?
    - Where?
    - Languages
  * - Kristof Beyls
    - General questions on how to contribute to LLVM; organizing meetups;
      submitting talks; and other general LLVM-related topics. Arm/AArch64
      codegen. LLVM security group. LLVM Office Hours.
    - Every 2nd and 4th Wednesday of the month at 9.30am CET, for 30 minutes.
      [ics](https://user.fm/calendar/v1-eac36694e3024854a9402da023f9e0fa/Kristof%20Beyls%20LLVM%20office%20hours.ics)
    - [Jitsi](https://meet.jit.si/KristofBeylsLLVMOfficeHour)
    - English, Flemish, Dutch
  * - Alina Sbirlea
    - General questions on how to contribute to LLVM; women in compilers;
      MemorySSA, BatchAA, various loop passes, new pass manager.
    - Monthly, 2nd Tuesdays, 10.00am PT/7:00pm CET, for 30 minutes.
      [ics](https://calendar.google.com/calendar/ical/c_pm6e7160iq7n5fcm1s6m3rjhh4%40group.calendar.google.com/public/basic.ics)
      [gcal](https://calendar.google.com/calendar/embed?src=c_pm6e7160iq7n5fcm1s6m3rjhh4%40group.calendar.google.com)
    - [GoogleMeet](https://meet.google.com/hhk-xpdj-gvx)
    - English, Romanian
  * - Clang Maintainers (chaired by Aaron Ballman)
    - Maintainers with various backgrounds attend, so anything related to Clang
      internals. If you have a specific topic, reach out to Aaron in advance and
      he can try to have the correct experts attend.
    - Monthly, 2nd Monday and 3rd Friday of the month at 10:00am Eastern and again at 2:00pm Eastern, for 60 minutes.
      [ics](https://calendar.google.com/calendar/ical/npgke5dug0uliud0qapptmps58%40group.calendar.google.com/public/basic.ics)
      [gcal](https://calendar.google.com/calendar/embed?src=npgke5dug0uliud0qapptmps58%40group.calendar.google.com)
    - [GoogleMeet](https://meet.google.com/xok-iqne-gmi)
    - English, Norwegian (not fluently)
  * - Tobias Grosser
    - General questions on how to contribute to LLVM/MLIR, Polly, Loop Optimization, FPL, Research in LLVM, PhD in CS, Summer of Code.
    - Monthly, last Monday of the month at 18:00 London time (typically 9am PT), for 30 minutes.
    - [Video Call](https://meet.grosser.science/LLVMOfficeHours)
    - English, German, Spanish, French
  * - Alexey Bader
    - SYCL compiler, offload tools, OpenCL and SPIR-V, how to contribute.
    - Monthly, 2nd Monday of the month at 9:30am PT, for 30 minutes.
    - [GoogleMeet](https://meet.google.com/pdz-xhns-uus)
    - English, Russian
  * - Quentin Colombet (he/him)
    - LLVM/MLIR; Codegen (Instruction selection (GlobalISel/SDISel), Machine IR,
      Register allocation, etc.); Optimizations; MCA
    - Monthly, 1st Wednesday of the month at 8.00am PT, for 30 minutes.
      [ics](https://calendar.google.com/calendar/ical/48c4ad60290a4df218e51e1ceec1106fe317b0ebc76938d9273592053f38204e%40group.calendar.google.com/public/basic.ics)
      [gcal](https://calendar.google.com/calendar/embed?src=48c4ad60290a4df218e51e1ceec1106fe317b0ebc76938d9273592053f38204e%40group.calendar.google.com)
    - [Google meet](https://meet.google.com/cbz-grrp-obs)
    - English, French
  * - Phoebe Wang (she/her)
    - X86 backend, General questions to X86, women in compilers.
    - Monthly, 3rd Wednesday of the month at 8:30am Beijing time, for 30 minutes.
    - [MS Teams](https://teams.microsoft.com/l/meetup-join/19%3ameeting_NWQ0MjU0NjYtZjUyMi00YTU3LThmM2EtY2Y2YTE4NGM3NmFi%40thread.v2/0?context=%7b%22Tid%22%3a%2246c98d88-e344-4ed4-8496-4ed7712e255d%22%2c%22Oid%22%3a%227b309d9c-a9bb-44c8-a940-ab97eef42d4d%22%7d)
    - English, Chinese
  * - Amara Emerson
    - GlobalISel questions.
    - Monthly, 4th Wednesday of the month at 9:30am PT, for 30 minutes.
    - [Google meet](https://meet.google.com/pdd-dibg-cwv)
    - English
  * - Maksim Levental and Jeremy Kun
    - MLIR newcomers and general discussion ([livestreamed](https://www.youtube.com/playlist?list=PLhxO86S3jsX2k7kOhZaV-qKWm8tNsUdAE))
    - Every two weeks, Wednesdays at 2:00pm US Pacific, for 90 minutes.
    - Livestream chat or [Google meet](https://meet.google.com/wit-tvzc-dwc)
    - English
  * - Renato Golin
    - General LLVM, MLIR & Linalg, distributed computing, research, socials.
    - Every first Friday of the month, 14:00 UK time, for 60 minutes.
    - [Google meet](https://meet.google.com/jps-twgq-ivz)
    - English, Portuguese
```

For event owners, our Discord bot also supports sending automated announcements
of upcoming office hours. Please see the {ref}`discord-bot-event-pings` section
for info.

### Guidance for office hours hosts

* If you're interested in becoming an office hours host, please add your
  information to the list above. Please create a calendar event for it and
  invite calendar@llvm.org to the event so that it'll show up on the
  {ref}`llvm-community-calendar`.
  Please see {ref}`llvm-community-calendar-host-guidance` for more guidance on
  what to add to your calendar invite.
* When starting an office hours session, if you haven't set up the Discord bot
  integration, consider typing something like "*Hi, I'm available for chats in
  the next half hour at* video chat URL. *I'm looking forward to having
  conversations on the video chat or here.*" on the
  [#office-hours Discord channel](https://discord.com/channels/636084430946959380/976196303681896538).

  Doing this can help:
    * overcome potential anxiety to call in for a first time,
    * people who prefer to first exchange a few messages through text chat
      before dialing in, and
    * remind the wider community that office hours do exist.
* If you decide to no longer host office hours, please do remove your entry
  from the list above.


## Discord

Users and developers of the LLVM project (including subprojects such as Clang)
can be found on the community's [Discord](https://discord.gg/xS7Z362)
chat server. The server is actively moderated.

The #buildbot-status channel has a bot for
[LLVM buildbot](http://lab.llvm.org/buildbot/#/console) status changes. The
bot will update the channel with a link to a build bot when a build goes from
passing to failing and again when the build goes from failing back to passing.
It is a great way to actively monitor the status of the build.

The bot also supports @mention-ing you when your email appears on a blamelist.
For more details, DM `help` to the bot.

(discord-bot-event-pings)=

### Discord bot event pings

Our Discord bot supports automatically sending messages about upcoming events
on [the LLVM community calendar](https://calendar.google.com/calendar/u/0/embed?src=calendar@llvm.org)
to Discord. This behavior is controlled on a per-event basis, by metadata in the
event's description. Each piece of metadata should be on its own line in the
event description.

The currently supported metadata is:

- `discord-bot-event-type` - **Required**. Specifies the event type. Valid
  values are `office-hours` and `sync-up`.
- `discord-bot-channels-to-mention` - **Sometimes required**. A
  comma-separated list of Discord channels to post notifications in. If your
  `discord-bot-event-type` is `office-hours`, the `#office-hours` channel
  will be implicitly appended to this list (ergo, you don't need to specify this
  item). Otherwise, you must specify a value here.
- `discord-bot-mention` - **Optional**. A comma-separated list of people to
  ping on each event notification. All names mentioned must be Discord
  usernames, and must have a leading `@`. e.g., `@foo, @bar`.
- `discord-bot-reminder-time-before-start` - **Optional**. The number of
  minutes before the beginning of an event to send a ping. This should be
  formatted as an integer. Defaults to 30.
- `discord-bot-message` - **Optional**. Text to append to all event pings.

An example of an event description with valid metadata is:

```text
Regular office hours to chat with people about LLVM! We can help with
questions, troubleshooting bugs, etc.

discord-bot-channels-to-mention: #beginners, #foo
discord-bot-event-type: office-hours
discord-bot-mention: @gburgessiv, @bar
discord-bot-message: Come join us for office hours!
discord-bot-reminder-time-before-start: 5
```

This metadata will prompt the Discord bot to:

* send pings 5 minutes before the given event starts, mentioning `@gburgessiv`
  and `@bar` in the ping
* send the pings to the `#beginners`, `#foo`, and `#office-hours` channels
* include the text "Come join us for office hours!" in the ping

A few minutes before sending a ping, the bot will double-check that the event
hasn't been cancelled.

If you need help troubleshooting, or have feature requests/questions, please
feel free to ping @gburgessiv!

(meetups-social-events)=

## Meetups and social events

```{toctree}
:hidden:

MeetupGuidelines
```

Besides developer [meetings and conferences](https://llvm.org/devmtg/),
there are several user groups called
[LLVM Socials](https://www.meetup.com/pro/llvm/). We greatly encourage you to
join one in your city. Or start a new one if there is none:

{doc}`MeetupGuidelines`

(community-proposals)=

## Community wide proposals

Proposals for large-scale changes in how the community behaves and how the work flow
can be better.

```{toctree}
:hidden:

Proposals/GitHubMove
Proposals/TestSuite
Proposals/VariableNames
Proposals/VectorPredication
```

* {doc}`Proposals/GitHubMove`

  Proposal to move from SVN/Git to GitHub.

* {doc}`Proposals/TestSuite`

  Proposals for additional benchmarks/programs for llvm's test-suite.

* {doc}`Proposals/VariableNames`

  Proposal to change the variable names coding standard.

* {doc}`Proposals/VectorPredication`

  Proposal for predicated vector instructions in LLVM.

(llvm-community-calendar)=

## LLVM community calendar

We aim to maintain a public calendar view of all events happening in the LLVM
community such as {ref}`online-sync-ups` and {ref}`office-hours`. The calendar
can be found at
https://calendar.google.com/calendar/u/0/embed?src=calendar@llvm.org and can
also be seen inline below:

```{raw} html
<iframe src="https://calendar.google.com/calendar/embed?height=600&wkst=1&bgcolor=%23ffffff&ctz=UTC&showCalendars=0&showDate=1&showNav=1&src=Y2FsZW5kYXJAbGx2bS5vcmc&color=%23039BE5" style="border:solid 1px #777" width="800" height="600" frameborder="0" scrolling="no"></iframe>
```

Note that the web view of the LLVM community calendar shows events in
Coordinated Universal Time (UTC). If you use Google Calendar, consider
subscribing to it with the + button in the bottom-right corner to view all
events in your local time zone alongside your other calendars.

(llvm-community-calendar-host-guidance)=

### Guidance on what to put into LLVM community calendar invites

To add your event, create a calendar event for it and invite calendar@llvm.org
on it. Your event should then show up on the community calendar.

Please put the following pieces of information in your calendar invite:

* Write a single paragraph describing what the event is about. Include things
  such as who the event is for and what sort of topics are discussed.
* State explicitly that the {doc}`CodeOfConduct` applies to this event.
* Make it clear who:

  * the organizer is.

  * the person to contact is in case of any code-of-conduct issues.  Typically,
    this would be the organizer.

* If you have meeting minutes for your event, add a pointer to where those live.
  A good place for meeting minutes could be as a post on LLVM Discourse.

* If you're hosting a sync-up or office hours event and would like it to be
  announced by the Discord bot, add the relevant metadata (full descriptions
  available in the {ref}`discord-bot-event-pings` section).

An example invite looks as follows

```text
This event is a meetup for all developers of LLDB. Meeting agendas are posted
on Discourse before the event.

Attendees must adhere to the LLVM Code of Conduct
([Code of Conduct](CodeOfConduct.md)). For any Code of Conduct reports,
please contact the organizers and also email conduct@llvm.org.

Agenda/Meeting Minutes: Link to minutes

Organizer(s): First Surname (name@email.com)

discord-bot-channels-to-mention: #lldb
discord-bot-event-type: sync-up
discord-bot-mention: @host-username, @another-host
discord-bot-message: Come join us to chat about LLDB!
discord-bot-reminder-time-before-start: 30
```
