diff --git a/.github/workflows/dev-db-nightly.yml b/.github/workflows/dev-db-nightly.yml index 9a2284d4d..838eb48de 100644 --- a/.github/workflows/dev-db-nightly.yml +++ b/.github/workflows/dev-db-nightly.yml @@ -23,12 +23,23 @@ on: # Allows you to run this workflow manually from the Actions tab workflow_dispatch: + inputs: + skipMariaDBBuild: + description: 'Skip MariaDB Build' + default: false + required: true + type: boolean + exportDumpAsSQL: + description: 'Save PostgreSQL Debug Dump' + default: false + required: true + type: boolean jobs: build-mariadb: name: Build MariaDB Docker Images runs-on: ubuntu-latest - if: ${{ github.ref == 'refs/heads/main' }} + if: ${{ github.ref == 'refs/heads/main' && github.event.inputs.skipMariaDBBuild == 'false' }} permissions: contents: read packages: write @@ -96,6 +107,7 @@ jobs: name: Migrate MySQL to PostgreSQL DB runs-on: ubuntu-latest container: ghcr.io/ietf-tools/datatracker-app-base:latest + if: ${{ always() && !failure() }} needs: [combine-mariadb] permissions: contents: read @@ -141,10 +153,22 @@ jobs: with: name: dump path: ietf.dump + + - name: Export as SQL (Debug) + if: ${{ github.event.inputs.exportDumpAsSQL == 'true' }} + run: pg_dump -h pgdb -U django ietf > ietf.sql + + - name: Upload SQL DB Dump (Debug) + if: ${{ github.event.inputs.exportDumpAsSQL == 'true' }} + uses: actions/upload-artifact@v3 + with: + name: dumpsql + path: ietf.sql build: name: Build PostgreSQL Docker Images runs-on: ubuntu-latest + if: ${{ always() && !failure() }} needs: [migrate] permissions: contents: read diff --git a/ietf/group/factories.py b/ietf/group/factories.py index 0a3f7b6db..d56fcf721 100644 --- a/ietf/group/factories.py +++ b/ietf/group/factories.py @@ -10,6 +10,8 @@ from django.utils import timezone from ietf.group.models import Group, Role, GroupEvent, GroupMilestone, \ GroupHistory, RoleHistory from ietf.review.factories import ReviewTeamSettingsFactory +from ietf.utils.timezone import date_today + class GroupFactory(factory.django.DjangoModelFactory): class Meta: @@ -68,7 +70,7 @@ class BaseGroupMilestoneFactory(factory.django.DjangoModelFactory): class DatedGroupMilestoneFactory(BaseGroupMilestoneFactory): group = factory.SubFactory(GroupFactory, uses_milestone_dates=True) - due = timezone.now()+datetime.timedelta(days=180) + due = date_today() + datetime.timedelta(days=180) class DatelessGroupMilestoneFactory(BaseGroupMilestoneFactory): group = factory.SubFactory(GroupFactory, uses_milestone_dates=False) diff --git a/ietf/meeting/views.py b/ietf/meeting/views.py index 8a028d435..6e96fa82a 100644 --- a/ietf/meeting/views.py +++ b/ietf/meeting/views.py @@ -3621,7 +3621,8 @@ def organize_proceedings_sessions(sessions): """ material_times = {} # key is material, value is first timestamp it appeared for s, mats in items: - timestamp = s.official_timeslotassignment().timeslot.time + tsa = s.official_timeslotassignment() + timestamp = tsa.timeslot.time if tsa else None if not isinstance(mats, list): mats = [mats] for mat in mats: @@ -3640,7 +3641,7 @@ def organize_proceedings_sessions(sessions): 'group': group, 'name': sess_name, 'canceled': all_canceled, - # pass sessions instead of the materials here so session data (like time) is easily available + 'has_materials': s.sessionpresentation_set.exists(), 'agendas': _format_materials((s, s.agenda()) for s in ss), 'minutes': _format_materials((s, s.minutes()) for s in ss), 'bluesheets': _format_materials((s, s.bluesheets()) for s in ss), @@ -3687,9 +3688,13 @@ def proceedings(request, num=None): sessions.filter(name__icontains='plenary') .exclude(current_status='notmeet') ) - irtf, _ = organize_proceedings_sessions( + irtf_meeting, irtf_not_meeting = organize_proceedings_sessions( sessions.filter(group__parent__acronym = 'irtf').order_by('group__acronym') ) + # per Colin (datatracker #5010) - don't report not meeting rags + irtf_not_meeting = [item for item in irtf_not_meeting if item["group"].type_id != "rag"] + irtf = {"meeting_groups":irtf_meeting, "not_meeting_groups":irtf_not_meeting} + training, _ = organize_proceedings_sessions( sessions.filter(group__acronym__in=['edu','iaoc'], type_id__in=['regular', 'other',]) .exclude(current_status='notmeet') diff --git a/ietf/static/css/document_html_txt.scss b/ietf/static/css/document_html_txt.scss index f79734e1a..84e677908 100644 --- a/ietf/static/css/document_html_txt.scss +++ b/ietf/static/css/document_html_txt.scss @@ -43,11 +43,13 @@ margin-bottom: var(--line); margin-left: 3ch; + section > p, section > dl.references > dd { /* Really long lines can wrap when all else fails. * This won't affect
 or , or cases where soft-wrapping occurs.
    * Mostly this exists so that long URLs wrap properly in Safari, which
    * doesn't break words at '/' like other browsers. */
   overflow-wrap: break-word;
+  }
 
 h1, h2, h3, h4, h5 {
   font-weight: bold;
@@ -368,7 +370,7 @@ td, th {
 }
 
 /* Links */
-a.selfRef, a.pilcrow {
+a.selfRef, a.pilcrow, .iref + a.internal {
   color: black;
   text-decoration: none;
 }
diff --git a/ietf/templates/doc/document_bofreq.html b/ietf/templates/doc/document_bofreq.html
index 6cb5df88b..3395403ca 100644
--- a/ietf/templates/doc/document_bofreq.html
+++ b/ietf/templates/doc/document_bofreq.html
@@ -154,7 +154,7 @@
         
{{ doc.name }}-{{ doc.rev }}
-
+
{{ content }}
diff --git a/ietf/templates/doc/document_html.html b/ietf/templates/doc/document_html.html index 84a921532..2718189c8 100644 --- a/ietf/templates/doc/document_html.html +++ b/ietf/templates/doc/document_html.html @@ -47,7 +47,6 @@ direction: rtl; text-align: left; } - } @@ -103,6 +102,8 @@ {% include "doc/document_info.html" with sidebar=False %} + + - {% for entry in not_meeting_groups %}{% if entry.sessions_with_materials %} + {% for entry in not_meeting_groups %}{% if entry.has_materials %} {% include "meeting/group_proceedings.html" with entry=entry meeting=meeting show_agenda=True only %} {% endif %}{% endfor %} @@ -148,7 +148,7 @@
{{ doc.name }}-{{ doc.rev }}
-
+
{% if doc.rev and content != None %} {% if content_is_html %} {{ content|sanitize|safe }} diff --git a/ietf/templates/group/meetings-row.html b/ietf/templates/group/meetings-row.html index 38266e5ce..6dc65ab7f 100644 --- a/ietf/templates/group/meetings-row.html +++ b/ietf/templates/group/meetings-row.html @@ -30,7 +30,7 @@ {% if s.current_status == "sched" %}{{ s.time|date:"D" }}{% endif %}
- {% if show_ical %} + {% if show_ical and s.current_status == "sched" %} {% if s.meeting.type_id == 'ietf' %} {{ s.time|date:"H:i" }} {% if session.agenda and show_agenda %} - {% include "meeting/session_agenda_include.html" with slug=item.slug session=session timeslot=item.timeslot only %} - {# Note: if called with show_agenda=True, calling template must load agenda_materials.js, needed by session_agenda_include.html #} {# agenda pop-up button #}
{% endif %} - {% if irtf %} + {% if irtf.meeting_groups %}

IRTF Internet Research Task Force

@@ -173,11 +173,39 @@ - {% for entry in irtf %} + {% for entry in irtf.meeting_groups %} {% include "meeting/group_proceedings.html" with entry=entry meeting=meeting show_agenda=True only %} {% endfor %} + {% if irtf.not_meeting_groups %} +

+ IRTF groups not meeting: + {% for entry in irtf.not_meeting_groups %} + {% if entry.name == "" %}{# do not show named sessions in this list #} + + {{ entry.group.acronym }} + {% if not forloop.last %},{% endif %} + {% endif %} + {% endfor %} +

+ + + + + + + + + + + + {% for entry in irtf.not_meeting %}{% if entry.has_materials %} + {% include "meeting/group_proceedings.html" with entry=entry meeting=meeting show_agenda=True only %} + {% endif %}{% endfor %} + +
+ {% endif %} {% endif %} {% endcache %} {% endblock %} diff --git a/ietf/templates/meeting/requests.html b/ietf/templates/meeting/requests.html index b88efa892..0b82aa60e 100644 --- a/ietf/templates/meeting/requests.html +++ b/ietf/templates/meeting/requests.html @@ -48,7 +48,7 @@ {% if not forloop.first %}{% endif %} - {{ session.current_status_name|capfirst }} + {{ session.current_status_name|capfirst }}