Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
6916953
implement share_reindex for none and false reindexed resources
mkovalua Mar 31, 2026
2e5fda0
added ability to add/remove files of an archived registration under o…
ihorsokhanexoft Apr 1, 2026
4b51e36
remove registration files by their guid, not project files guids
ihorsokhanexoft Apr 2, 2026
c9dc568
Merge pull request #11679 from CenterForOpenScience/develop
adlius Apr 3, 2026
b8409f8
[ENG-10683] Fixed typo in registration schemas permission (#11660)
ihorsokhanexoft Apr 7, 2026
4779c89
[ENG-10615] Have test runner check for uncreated migrations (#11643)
antkryt Apr 7, 2026
2e0046d
[ENG-10575] - Update command, add tests (#11641)
Vlad0n20 Apr 7, 2026
f67d8e6
make confirm ham a celery task (#11666)
antkryt Apr 7, 2026
51fa36f
[ENG-9810] Notification Settings Missing from Provider Settings Tab (…
Ostap-Zherebetskyi Apr 7, 2026
98b15aa
[ENG-10338] add embargo report to admin (#11637)
antkryt Apr 7, 2026
8212ede
[ENG-9907] Analytics are increasing (unique views) when a contributor…
antkryt Apr 7, 2026
8612887
[ENG-10042] Fix/eng 10042 (#11551)
Vlad0n20 Feb 4, 2026
c705963
[ENG-10042] Fix/eng 10042 (#11593)
Vlad0n20 Feb 18, 2026
0805fef
fixed non-consistent COI
ihorsokhanexoft Mar 12, 2026
23f0a83
fixed permission in a template
ihorsokhanexoft Mar 12, 2026
28410ef
[ENG-10063] orcid integration (#11686)
futa-ikeda Apr 8, 2026
efc1d60
Update change log and bump version
cslzchen Apr 8, 2026
fced96b
Merge branch 'release/26.7.0'
cslzchen Apr 8, 2026
9fae6b9
Merge tag '26.7.0' into develop
cslzchen Apr 8, 2026
75d571e
resolve CR
mkovalua Apr 8, 2026
7ffcf81
ci: bump github actions versions
afuetterer Apr 9, 2026
910231d
fixed missing validation and added new tests
ihorsokhanexoft Apr 9, 2026
4d396af
Merge pull request #11690 from CenterForOpenScience/develop
adlius Apr 10, 2026
8c5c641
Merge pull request #11689 from afuetterer/ci
adlius Apr 10, 2026
dcb6bd4
Merge pull request #11671 from mkovalua/fix/ENG-10028-pbs-26-6
adlius Apr 13, 2026
a404bcd
Merge pull request #11633 from ihorsokhanexoft/fix/ENG-10328
adlius Apr 13, 2026
1448490
remove rejected preprint version (#11693)
mkovalua Apr 13, 2026
caf7b21
added error handling when file is not attached to a registration
ihorsokhanexoft Apr 14, 2026
60b11cd
simplify if statement
ihorsokhanexoft Apr 14, 2026
a1aa899
Merge pull request #11674 from ihorsokhanexoft/feature/ENG-10283
adlius Apr 15, 2026
f5bd996
fix logging and emails
antkryt Apr 15, 2026
ae9adba
fix tests
antkryt Apr 15, 2026
4dfb03f
Merge pull request #11696 from antkryt/hotfix/ENG-10771
adlius Apr 21, 2026
88e2ecf
fix state divergence for registration approval
antkryt Apr 22, 2026
cab850a
fix tests
antkryt Apr 22, 2026
31b69f9
Bump version no. Add CHANGELOG
adlius Apr 22, 2026
ce5cd38
Merge branch 'hotfix/26.7.1'
adlius Apr 22, 2026
7b9333a
Merge tag '26.7.1' into develop
adlius Apr 22, 2026
6330798
Merge develop into pbs-26-6 (#11704)
brianjgeiger Apr 23, 2026
0d7a1af
Merge pull request #11709 from CenterForOpenScience/feature/pbs-26-6
adlius Apr 23, 2026
a64c9ce
Bump version no. Add CHANGELOG
adlius Apr 23, 2026
3174ec4
Merge branch 'release/26.8.0'
adlius Apr 23, 2026
3f36856
Merge tag '26.8.0' into develop
adlius Apr 23, 2026
f4439fd
Prevent updating invalid social attr when confirming ORCID
futa-ikeda Apr 28, 2026
82ae1b6
Merge pull request #11717 from futa-ikeda/hotfix/orcid-email-confirm
adlius Apr 28, 2026
3a9cb41
Merge pull request #11703 from antkryt/fix/ENG-10715
adlius Apr 29, 2026
fb6a05c
Bump version no. Add CHANGELOG
adlius Apr 30, 2026
9bff958
Merge branch 'hotfix/26.8.1'
adlius Apr 30, 2026
ef3f2a6
Merge tag '26.8.1' into develop
adlius Apr 30, 2026
884a24a
avoid 502 on creating preprint version from rejected version
mkovalua May 4, 2026
0428d8b
Merge pull request #11723 from mkovalua/fix/ENG-11009
adlius May 4, 2026
e7defb2
Bump version no. Add CHANGELOG
adlius May 6, 2026
37026bf
Merge branch 'hotfix/26.8.2'
adlius May 6, 2026
159b72c
Merge tag '26.8.2' into develop
adlius May 6, 2026
ee70f4b
[ENG-10275] [ENG-10800] OSF4I In-progress SSO - BE Piece (#11701)
Ostap-Zherebetskyi May 7, 2026
a6d722c
Update changelog and bump version
cslzchen May 7, 2026
f176d56
Merge branch 'release/26.9.0'
cslzchen May 7, 2026
9e13c06
Merge tag '26.9.0' into develop
cslzchen May 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/actions/gen-report/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ runs:
using: "composite"
steps:
- name: Archive code coverage results
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: ${{github.job}} HTML REPORT
path: report.html
- name: Generate Report
uses: dorny/test-reporter@v2
uses: dorny/test-reporter@v3
if: success() || failure() # run this step even if previous step failed
with:
name: ${{github.job}} REPORT # Name of the check run which will be created
Expand Down
4 changes: 2 additions & 2 deletions .github/actions/start-build/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ runs:
using: "composite"
steps:
- id: cache-objects
uses: actions/cache@v4
uses: actions/cache@v5
with:
path: ~/.cache
key: reqs_${{ hashFiles('poetry.lock') }}
Expand All @@ -16,7 +16,7 @@ runs:
with:
ELASTICSEARCH6_ARCHIVE: ${{ env.ELASTICSEARCH6_ARCHIVE }}
- name: Set up Python 3.12
uses: actions/setup-python@v5
uses: actions/setup-python@v6
with:
python-version: '3.12'
- name: Install lxml
Expand Down
18 changes: 9 additions & 9 deletions .github/workflows/test-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@ jobs:
build-cache:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v6
- id: cache-objects
uses: actions/cache@v4
uses: actions/cache@v5
with:
path: ~/.cache
key: reqs_${{ hashFiles('poetry.lock') }}
Expand Down Expand Up @@ -50,7 +50,7 @@ jobs:
# Maps tcp port 5432 on service container to the host
- 5432:5432
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v6
- uses: ./.github/actions/start-build
- name: Run tests
run: poetry run python3 -m invoke test-ci-addons --junit
Expand All @@ -77,7 +77,7 @@ jobs:
# Maps tcp port 5432 on service container to the host
- 5432:5432
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v6
- uses: ./.github/actions/start-build
- name: Run tests
run: poetry run python3 -m invoke test-ci-website --junit
Expand All @@ -104,7 +104,7 @@ jobs:
# Maps tcp port 5432 on service container to the host
- 5432:5432
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v6
- uses: ./.github/actions/start-build
- name: NVM & yarn install
run: poetry run python3 -m invoke assets --dev
Expand Down Expand Up @@ -133,7 +133,7 @@ jobs:
# Maps tcp port 5432 on service container to the host
- 5432:5432
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v6
- uses: ./.github/actions/start-build
- name: Run tests
run: poetry run python3 -m invoke test-ci-api2 --junit
Expand Down Expand Up @@ -161,7 +161,7 @@ jobs:
# Maps tcp port 5432 on service container to the host
- 5432:5432
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v6
- uses: ./.github/actions/start-build
- name: Run tests
run: poetry run python3 -m invoke test-ci-api3-and-osf --junit
Expand Down Expand Up @@ -194,7 +194,7 @@ jobs:
- 1025:1025
- 8025:8025
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v6
- uses: ./.github/actions/start-build
- name: Run tests
run: poetry run python3 -m invoke test-ci-mailhog -n 1 --junit
Expand Down Expand Up @@ -222,7 +222,7 @@ jobs:
# Maps tcp port 5432 on service container to the host
- 5432:5432
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v6
- uses: ./.github/actions/start-build
- name: Run tests
run: poetry run python3 -m invoke test-ci-scripts -n 1 --junit
Expand Down
30 changes: 30 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,36 @@

We follow the CalVer (https://calver.org/) versioning scheme: YY.MINOR.MICRO.

26.9.0 (2026-05-07)
===================

- OSF4I In-progress SSO Project - BE Piece

26.8.2 (2026-05-06)
===================

- Hotfix to avoid 502 on creating preprint version from rejected version

26.8.1 (2026-04-30)
===================

- Hotfix for registrations sometimes fail to become public after approval

26.8.0 (2026-04-23)
===================

- Miscellaneous improvements and bug fixes

26.7.1 (2026-04-22)
===================

- Hotfix to improve notifications and logging for failed registrations

26.7.0 (2026-04-08)
===================

- ORCiD Integration Project - BE Part

26.6.3 (2026-04-02)
===================

Expand Down
1 change: 1 addition & 0 deletions admin/base/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
re_path(r'^cedar_metadata_templates/', include('admin.cedar.urls', namespace='cedar_metadata_templates')),
re_path(r'^draft_registrations/', include('admin.draft_registrations.urls', namespace='draft_registrations')),
re_path(r'^files/', include('admin.files.urls', namespace='files')),
re_path(r'^share_reindex/', include('admin.share_reindex.urls', namespace='share_reindex')),
]),
),
]
Expand Down
21 changes: 20 additions & 1 deletion admin/institutions/forms.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from django import forms
from osf.models import Institution
from osf.models.institution import Institution, SSOAvailability


class InstitutionForm(forms.ModelForm):
Expand All @@ -10,6 +10,25 @@ class Meta:
'is_deleted', 'contributors', 'storage_regions',
]

def clean(self):
super().clean()

if hasattr(self, 'cleaned_data') and self.changed_data:
if not self.cleaned_data['delegation_protocol']:
if self.cleaned_data['sso_availability'] != SSOAvailability.UNAVAILABLE.value:
self.add_error(None, 'SSO availability must be set to "Unavailable" when no delegation protocol is configured.')

elif self.cleaned_data['deactivated']:
if self.cleaned_data['sso_availability'] != SSOAvailability.HIDDEN.value:
self.add_error(None, 'SSO availability must be set to "Hidden" when the institution is deactivated.')

else:
if self.cleaned_data['sso_availability'] not in [
SSOAvailability.PUBLIC.value,
SSOAvailability.HIDDEN.value
]:
self.add_error(None, 'SSO availability must be set to "Public" or "Hidden" when delegation protocol is configured.')


class InstitutionalMetricsAdminRegisterForm(forms.Form):
""" A form that finds an existing OSF User, and grants permissions to that
Expand Down
12 changes: 12 additions & 0 deletions admin/institutions/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ def get_context_data(self, *args, **kwargs):
institution_dict = model_to_dict(institution)
kwargs.setdefault('page_number', self.request.GET.get('page', '1'))
kwargs['institution'] = institution_dict
kwargs['cas_login_url'] = institution.cas_login_url
kwargs['logo_path'] = institution.logo_path
kwargs['banner_path'] = institution.banner_path
fields = institution_dict
Expand Down Expand Up @@ -117,6 +118,17 @@ def get_context_data(self, *args, **kwargs):
def get_success_url(self, *args, **kwargs):
return reverse_lazy('institutions:detail', kwargs={'institution_id': self.kwargs.get('institution_id')})

def post(self, request, *args, **kwargs):
# Override `post` method in `django.views.generic.edit.ProcessFormView` due to custom behavior
self.object = self.get_object()
form = self.get_form()
if form.is_valid():
return self.form_valid(form)
else:
for error in form.non_field_errors():
messages.error(request, error)
return redirect('institutions:detail', institution_id=self.kwargs.get('institution_id'))


class InstitutionExport(PermissionRequiredMixin, View):
permission_required = 'osf.view_institution'
Expand Down
4 changes: 3 additions & 1 deletion admin/management/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,7 @@
re_path(r'^empty_metadata_dataarchive_registration_bulk_resync', views.EmptyMetadataDataarchiveRegistrationBulkResync.as_view(),
name='empty-metadata-dataarchive-registration-bulk-resync'),
re_path(r'^sync_notification_templates', views.SyncNotificationTemplates.as_view(),
name='sync_notification_templates')
name='sync_notification_templates'),
re_path(r'^remove_orcid_from_user_social', views.RemoveOrcidFromUserSocial.as_view(),
name='remove_orcid_from_user_social')
]
9 changes: 9 additions & 0 deletions admin/management/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
from osf.management.commands.fetch_cedar_metadata_templates import ingest_cedar_metadata_templates
from osf.management.commands.sync_doi_metadata import sync_doi_metadata, sync_doi_empty_metadata_dataarchive_registrations
from osf.management.commands.populate_notification_types import populate_notification_types
from osf.management.commands.remove_orcid_from_user_social import remove_orcid_from_user_social
from scripts.find_spammy_content import manage_spammy_content
from django.urls import reverse
from django.shortcuts import redirect
Expand Down Expand Up @@ -181,3 +182,11 @@ def post(self, request):
populate_notification_types()
messages.success(request, 'Notification templates have been successfully synced.')
return redirect(reverse('management:commands'))


class RemoveOrcidFromUserSocial(ManagementCommandPermissionView):

def post(self, request):
remove_orcid_from_user_social()
messages.success(request, 'Orcid from user social have been successfully removed.')
return redirect(reverse('management:commands'))
4 changes: 4 additions & 0 deletions admin/nodes/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
re_path(r'^flagged_spam$', views.NodeFlaggedSpamList.as_view(), name='flagged-spam'),
re_path(r'^known_spam$', views.NodeKnownSpamList.as_view(), name='known-spam'),
re_path(r'^known_ham$', views.NodeKnownHamList.as_view(), name='known-ham'),
re_path(r'^embargo_report/$', views.EmbargoReportView.as_view(), name='embargo-report'),
re_path(r'^doi_backlog_list/$', views.DoiBacklogListView.as_view(), name='doi-backlog-list'),
re_path(r'^approval_backlog_list/$', views.ApprovalBacklogListView.as_view(), name='approval-backlog-list'),
re_path(r'^confirm_approve_backlog_list/$', views.ConfirmApproveBacklogView.as_view(), name='confirm-approve-backlog-list'),
Expand Down Expand Up @@ -51,4 +52,7 @@
re_path(r'^(?P<guid>[a-z0-9]+)/system_tags/(?P<tag_id>[a-z0-9]+)/remove/$', views.NodeRemoveSystemTag.as_view(), name='remove-system-tag'),
re_path(r'^(?P<guid>[a-z0-9]+)/update_permissions/$', views.NodeUpdatePermissionsView.as_view(), name='update-permissions'),
re_path(r'^(?P<guid>[a-z0-9]+)/remove_file/$', views.NodeRemoveFileView.as_view(), name='remove-file'),
re_path(r'^(?P<guid>[a-z0-9]+)/add_osfstorage_file/$', views.NodeAddOsfStorageFileView.as_view(), name='add-osfstorage-file'),
re_path(r'^(?P<guid>[a-z0-9]+)/remove_osfstorage_file/$', views.NodeRemoveOsfStorageFileView.as_view(), name='remove-osfstorage-file'),

]
Loading
Loading