Arches 7.4.0 release notes
------------------------

### Major enhancements
- Allows users to search on strings containing special characters, #9574
- Allows admins to apply permissions to map layers, #9451
- Allows admin to configure search export access, #9479
- Adds many accessibility improvements, #9603
- Adds bulk data editor, #9156
- Allow graph designers to describe instance relationships with concept labels, #9213
- Adds in-app help for plugins & etl modules, #9589
- Allows project developer to enforce arches version compatibility in a project, #9420
- Prevents node alias conflicts when appending a branch, #9209
- Implement well defined map layer sort order, fully config map layer in JSON file, #9291
- Fixes Admin page error, #9583

### Additional highlights
- Fixes bug causing empty text nodes to display when Hide Null Values selected, #9143
- Fixes i18n bug in __arches_get_tile_cardinality_violations, #9148
- Allows configuration of datatypes to specify PG datatype in Resou…, #9069
- JSONLD parser fixes, #9233
- Ensures descriptors are updated in indexed resource instance, re #9232, #9245
- Cards now load from cards or card components directories in package, #9263
- Allows for preloaded suffix on uploaded files, #8713
- Updates grouping card for 7.x #9267, #9276
- Improves error reporting in bulk importer modules, #9165, #9172
- Adds language updates for Arabic, Hebrew, and Urdu, re #9317, #9323
- Fixes search url UI sync, re #9299, #9300
- Fixes tile file download issue that can cause arches crash per #9319, #9320
- Fixes system settings import error, re #9374, #9375
- Fixes KML import bug, #9394
- Update webpack for Windows support, #9286
- Fixes clone graph interaction #9264, #9275
- EDTF and table alias fix for spatial views, #9478
- Updates view triggers to add support for null geometries, #9439
- Adds the branch publication id to the node, #9055, #9059
- Moves cardinality to nodegroups, #9483
- Fixes Login page redirect, #9526
- Fixes asterisk not showing up for required string nodes, #9547
- Fixes not null advanced search query, #9556
- Adds temporary files table , #9565
- Updates Graph.append_branch to handle branch with multiple nodes that share a name with a node in the graph, #9473
- Prevents node deletion in published graph, re #9575, #9576
- Adds inverseOf to concept relation types, re #9573, #9577
- Sort cards, widgets and nodes on serialize, #9539
- Creates `get_published_graph` method and replaces all calls, #9600
- Adds Home Link to side navigation menu, #9596

Performance Improvements
- Prevent unnecessary card constraint queries, #9231
- Use descriptor from resource instance when available, #9234
- Use serialized graphs in building resource json, #9447
- Removes unnecessary celery check during index, #9542
- Fixes inefficient database trigger, #9605

### Dependency changes
```
Python:
    Upgraded:
        Django 3.2.15 -> 3.2.19
        requests[security] 2.18.1 -> 2.31.0
        python-slugify 4.0.0 -> 7.0.0

    Added:
        psycopg2==2.9.6 (replaces psycopg2-binary)
        semantic-version==2.10.0

    Removed:
        psycopg2-binary==2.8.4
        python-docx==0.8.10

JavaScript:
    Upgraded:
        jquery: ~3.6.2 -> ^3.6.2

    Added:
        cross-env: ^7.0.3
```

### Breaking changes
None

### Upgrading Arches

1. Upgrade to version 7.3.0 before proceeding. If upgrading from an earlier version, refer to the upgrade process in the [Version 7.3.0 release notes](https://github.com/archesproject/arches/blob/dev/7.3.x/releases/7.3.0.md)

2. Be sure to backup your database before proceeding.

3. Upgrade to Arches 7.4.0
    ```
    pip uninstall psycopg2-binary
    pip install --upgrade arches==7.4.0
    ```

4. Within your project, with your Python 3 virtual environment activated:
    ```
    python manage.py migrate
    ```

5. Reindex your database:
   ```
   python manage.py es reindex_database
   ```

6. Update the JavaScript dependencies and devDependencies:
    In the project's `package.json` file change arches from `stable/7.3.0` to `stable/7.4.0`:
    ```    
        "dependencies": {
            "arches": "archesproject/arches#stable/7.4.0",
        },
        "devDependencies": {
            "arches-dev-dependencies": "archesproject/arches-dev-dependencies#stable/7.4.0"
        }
    ```

7. Start your application server in a separate terminal if it's not already running. Your webpack build will not complete without your application server running.

8. In the same terminal window where you ran `yarn` ( on the same level as `package.json` ), run `yarn start` or `yarn build_development`. This will generate your `media/build` directory.
   - If running your project in development:
     -  `yarn start` will build the frontend of the application and then start a webpack development server
      - `yarn build_development` will build a development bundle for the frontend assests of the application -- this should complete in less than 2 minutes
    - If running your project in production:
      - `yarn build_production` This builds a production bundle. **takes up to 2hrs depending on resources**
      - Alternatively you can `cd ..` up a directory and run `python manage.py build_production`. This will create a production bundle of frontend assessts and also call `collectstatic`.
  

6. If you are running Arches on Apache, be sure to run:

    ```
    collectstatic
    ```
    and restart your server.
    ```
    sudo service apache2 reload
    ```

