GitLab's annual major release is around the corner, along with a lot of new and exciting features, there will be a few breaking changes, learn more here.

  1. 27 May, 2021 1 commit
  2. 31 Mar, 2021 1 commit
  3. 15 Mar, 2021 2 commits
  4. 28 Feb, 2021 1 commit
  5. 27 Feb, 2021 2 commits
  6. 21 Feb, 2021 1 commit
    • Andrew Shu's avatar
      Process tags to left of comma only · 0404d0df
      Andrew Shu authored
      If user types "tag1 tag2" then adds a comma between,
      it should respect the comma to give "tag1" and "tag2".
      We use keydown and setTimeout because keyup
      works on a keyboard but not reliably on mobile.
      Nonzero timeout is needed or else the comma is sometimes
      inserted too late and not seen by addChip(),
      tested on desktop Firefox.
  7. 24 Jan, 2021 1 commit
  8. 16 Dec, 2020 1 commit
  9. 12 Dec, 2020 2 commits
    • Deimos's avatar
      Apply global rate-limit to Stripe donate endpoint · e685639e
      Deimos authored
      People are still continuing to try to abuse the donate page to check
      stolen credit card numbers, and last night there was a massive burst of
      attempts coming from many IPs, so the current rate-limiting wasn't able
      to block most of it. Luckily Stripe blocked all of the charges this
      time, but I can't keep risking another incident where Tildes is the
      source of a bunch of fraudulent charges.
      This adds a global rate-limit to the donate page that should never get
      hit during normal usage. Hopefully this will be enough to keep the abuse
      away from the page when it stops working for them relatively quickly.
    • Deimos's avatar
      Add support for globally rate-limiting actions · 06764e9b
      Deimos authored
      Previously, rate limits had to apply to a particular user or a
      particular IP address, or both. This adds support for global
      rate-limits, where the limit will apply to everyone trying to perform
      the action. This probably won't be used much overall, but might be
      necessary for certain cases where something abusive is happening and it
      can't be easily blocked by user or IP.
      This is a bit ugly and would probably be better implemented by having a
      separate class that inherits from RateLimitedAction or something
      similar, but it will do the job.
  10. 06 Dec, 2020 1 commit
  11. 01 Dec, 2020 2 commits
    • Deimos's avatar
      Run app-related services under the app user · 88944bed
      Deimos authored
    • Deimos's avatar
      Add ability to process posts with Lua scripts · 5fbc72c4
      Deimos authored
      This adds the backend pieces (no interface yet) to configure Lua scripts
      that will be applied to topics and comments due to different events.
      Initially, it only supports running a script when a new topic or comment
      is posted. For example, here is a Lua script that would prepend a new
      topic's title with "[Text] " or "[Link] " depending on its type, as well
      as replace its tags with either "text" or "link":
      function on_topic_post (topic)
          if (topic.is_text_type) then
              topic.title = "[Text] " .. topic.title
              topic.tags = {"text"}
          elseif (topic.is_link_type) then
              topic.title = "[Link] " .. topic.title
              topic.tags = {"link"}
      There can be a global script as well as group-specific scripts, and the
      scripts are sandboxed, with limited access to data as well as being
      restricted to a subset of Lua's built-in functions. The Lua sandboxing
      code comes from Splash ( It will
      need to be modified, but this commit keeps it unmodified so that future
      changes can be more easily tracked by comparing to the original state of
      the file.
      The sandboxing also includes some restrictions on number of instructions
      and memory usage, but this might be more effectively managed on the OS
      level. More research will still need to be done on security and resource
      restrictions before this feature can be safely opened to users.
  12. 18 Nov, 2020 1 commit
  13. 16 Nov, 2020 1 commit
  14. 15 Nov, 2020 1 commit
    • Deimos's avatar
      Add ability to edit topic title from listing pages · dac8ec3a
      Deimos authored
      This adds an "Edit title" choice in the actions dropdown for topics on
      listing pages, instead of needing to go to the comments page.
      Some pieces of this feel a little hack-ish (like needing to reduce the
      bottom padding because of the usually-empty div that the title-editing
      input gets put into), so I'll probably want to try and find a better
      overall approach to this eventually, but it should do the job for now.
  15. 04 Nov, 2020 2 commits
    • Deimos's avatar
      Alphabetize invoke task functions · 8c913d59
      Deimos authored
      Just rearranges the module so the functions are in alphabetical order
      (except web_server_reload, which has to be earlier so it can be called
      as a post-task).
    • Deimos's avatar
      Rename invoke tasks to standardize format · 79072f76
      Deimos authored
      I think this is going to be a better way to name invoke tasks. The
      previous naming where a verb was often first made it much harder for
      anyone to figure out the name of a task that affects a certain thing
      without always looking through the entire list.
      For example, if someone is looking for a task that affects the web
      server, it's much easier to find web-server-reload than
      The changes were:
      - check-code-style -> code-style-check
      - reload-web-server -> web-server-reload
      - renew-tls-certificate -> tls-certificate-renew
      - type-checking -> type-check
      - update-pip-requirements -> pip-requirements-update
  16. 02 Nov, 2020 2 commits
  17. 21 Oct, 2020 1 commit
  18. 10 Oct, 2020 2 commits
    • Deimos's avatar
      Remove "via" annotations from requirements files · f3105267
      Deimos authored
      I should have just done this all along, these have been way more trouble
      than they're worth.
      If the information is needed, it's always possible to just do a temp run
      of pip-compile without --no-annotate or use a dedicated tool like
    • Deimos's avatar
      Add --full flag to invoke test · 9652dfb7
      Deimos authored
      This is simpler than needing to know that --html-validation is the flag
      to use to make sure that all tests are run, and can stay constant even
      if we add other types of excluded-by-default tests in the future.
  19. 09 Oct, 2020 3 commits
  20. 07 Oct, 2020 8 commits
  21. 06 Oct, 2020 2 commits
    • Deimos's avatar
      Add invoke task to run tests · c2bfe2e2
      Deimos authored
      This way, instead of needing to know that you run "pytest" and knowing
      tricks like "pytest -m ''" to run webtests and HTML validation, you can
      now just run "invoke test", with more intuitive flags. This also reduces
      the output in quiet mode even more.
      After adding invoke tasks for some of the other tools/checks, I'll be
      able to switch the git hooks to use these instead.
    • Deimos's avatar
      Add invoke task to update pip package versions · 6a216aba
      Deimos authored
      First invoke task: uses pip-compile to update the versions of all the
      pip packages in requirements.txt and requirements-dev.txt. It also
      post-processes the output file and removes any comments that have a "-r"
      reference in them, since those currently cause Salt to break (and are
      kind of redundant anyway).
      Unfortunately, as part of writing this I discovered that invoke can't
      handle type annotations in the definitions of its task functions, so I
      had to exclude from being checked by mypy. That makes me a
      little nervous about whether invoke is still being maintained. Relevant
      issue (over 4 years old):
  22. 05 Oct, 2020 1 commit
  23. 02 Oct, 2020 1 commit