Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

doc: provisioning: Add documentation #11704

Merged
merged 1 commit into from
Aug 9, 2023

Conversation

juhaylinen
Copy link
Contributor

Add documentation for nrf_provisioning library and sample.
Update changelog.

@juhaylinen juhaylinen requested a review from jarlamsa July 5, 2023 11:44
@github-actions github-actions bot added changelog-entry-required Update changelog before merge. Remove label if entry is not needed or already added. doc-required PR must not be merged without tech writer approval. labels Jul 5, 2023
@juhaylinen juhaylinen removed the changelog-entry-required Update changelog before merge. Remove label if entry is not needed or already added. label Jul 5, 2023
@NordicBuilder
Copy link
Contributor

NordicBuilder commented Jul 5, 2023

Test specification

CI/Jenkins/NRF

  • Skipped

CI/Jenkins/integration

  • Skipped

Note: This message is automatically posted and updated by the CI

@github-actions github-actions bot added the changelog-entry-required Update changelog before merge. Remove label if entry is not needed or already added. label Jul 5, 2023
@NordicBuilder
Copy link
Contributor

You can find the documentation preview for this PR at this link. It will be updated about 10 minutes after the documentation build succeeds.

Note: This comment is automatically posted by the Documentation Publishing GitHub Action.

samples/cellular/nrf_provisioning/README.rst Outdated Show resolved Hide resolved
samples/cellular/nrf_provisioning/README.rst Outdated Show resolved Hide resolved
samples/cellular/nrf_provisioning/README.rst Outdated Show resolved Hide resolved
samples/cellular/nrf_provisioning/README.rst Outdated Show resolved Hide resolved
samples/cellular/nrf_provisioning/README.rst Outdated Show resolved Hide resolved
samples/cellular/nrf_provisioning/README.rst Outdated Show resolved Hide resolved
samples/cellular/nrf_provisioning/README.rst Outdated Show resolved Hide resolved
doc/nrf/libraries/networking/nrf_provisioning.rst Outdated Show resolved Hide resolved
doc/nrf/libraries/networking/nrf_provisioning.rst Outdated Show resolved Hide resolved
@peknis peknis requested a review from melwee01 July 6, 2023 06:17
:local:
:depth: 2

The nRF Device provisioning library enables a device to connect to Nordic Semiconductor's provisioning Service.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unsure about the capitalization: Device Provisioning? Neither capitalized?

If we are talking about the cloud-side provisioning service, I believe the name will be nRF Cloud Provisioning Service, part of nRF Cloud Security Services. I can check with PMT.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please check the correct name.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just to check, the service we're talking about here is the Cloud service?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, the Cloud service

samples/cellular/nrf_provisioning/README.rst Outdated Show resolved Hide resolved
samples/cellular/nrf_provisioning/README.rst Outdated Show resolved Hide resolved
Copy link
Contributor

@melwee01 melwee01 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have a lot of questions based on the doc writing process for the nRF Cloud Provisioning Service.

If that's the service we refer to in this doc, some changes are required.

* A pointer to a callback function which is to be called on modem state changes.
* A pointer that must be called once provisioning is done.

If you provide ``null`` as a callback function address argument, a corresponding default callback used.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
If you provide ``null`` as a callback function address argument, a corresponding default callback used.
If you provide ``null`` as a callback function address argument, a corresponding default callback is used.

The sample shows how the device performs the following actions:

* Connects to nRF Device provisioning Service.
* Fetches available device specific provisioning commands.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We refer to the group of these commands as the provisioning configuration.

* Acts on any AT commands, if available.
* Reports the results back to the server.
In case of errors, stops processing the commands at the first error and reports it back to server.
* Sends ``FINISHED`` response if all the previous commands are executed without errors provided and ``FINISHED`` is one of the set provisioning commands.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure what 'without errors provided and FINISHED is one of the set provisioning commands' means. Possible values for the command status in the Provisioning Service are PENDING, FAILED, IN_PROGRESS, SUCCEEDED, and SKIPPED. Does this refer to the command status or the status of something in the sample, which has different values?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FINISHED refers to the provisioning command which tells to the device that provisioning process has been finished.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK. So this refers specifically to something in the sample, and not the Provisioning Service.

**************

Device side interaction is not required.
You must fill the command queue at the server side.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this referring to the nRF Cloud portal interface? If so, replace 'fill the command queue' with 'define the provisioning configuration'.

You can also define the configuration using the REST API.

.. _CONFIG_NRF_PROVISIONING_ROOT_CA_SEC_TAG:

CONFIG_NRF_PROVISIONING_ROOT_CA_SEC_TAG
Root CA security tag for the Nordic Semiconductor's provisioning service.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Again, does this refer specifically to the nRF Cloud (secure) Provisioning Service?


.. include:: /includes/tfm.txt

The sample requires that private device key is installed on the device and the associated Device UUID is obtained from the Identity Service.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
The sample requires that private device key is installed on the device and the associated Device UUID is obtained from the Identity Service.
The sample requires that private device key is installed on the device and the associated device UUID is obtained from the Identity Service.

samples/cellular/nrf_provisioning/README.rst Outdated Show resolved Hide resolved
* After the execution of the commands to report the results.

The library shuts down the modem for writing data to the modem's non-volatile memory, if `AT commands <AT Commands Reference Guide_>`_ are involved.
Once the memory writes are complete, connection is re-established to report the results back to the server.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Once the memory writes are complete, connection is re-established to report the results back to the server.
Once the memory writes are complete, the connection is re-established to report the results back to the server.

Once the memory writes are complete, connection is re-established to report the results back to the server.
The results are reported back to the server when either all the commands succeed or when an error occurs.
If an error occurs, the results of all the commands that are successfully executed before the error and the erroneous result are reported back to the server.
All successfully executed commands will be removed from the server-side queue, but if any errors occur, the erroneous command and all the remaining unexecuted commands will be flushed from the queue.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We need to be careful to distinguish this from the provisioning configuration for a claimed device in nRF Cloud: these are, as I understand, the commands we're talking about here.

On the Cloud side, the commands form the provisioining configuration, and the configuration remains in the interface and the service's data about the device until the commands are deleted by the user.

If this is some queue in the network, I'd like that to be a little clearer.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, we are talking about the provisioning configuration here.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All successfully executed commands will be removed from the server-side queue, but if any errors occur, the erroneous command and all the remaining unexecuted commands will be flushed from the queue.

Just to be clear whether you are describing server functionality or device functionality, the removal from the queue and flushing of the queue are done on the server side, not on the device side in this library, correct?


During provisioning, the library first tries to establish the transport for communicating with the service.
This procedure involves a TLS handshake where the client establishes the correct server.
The server uses the attestation token or the JWT token generated by the device for authenticating the client.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cloud-side docs on attestation tokens and the Identity Service will be available next week.

Once the memory writes are complete, connection is re-established to report the results back to the server.
The results are reported back to the server when either all the commands succeed or when an error occurs.
If an error occurs, the results of all the commands that are successfully executed before the error and the erroneous result are reported back to the server.
All successfully executed commands will be removed from the server-side queue, but if any errors occur, the erroneous command and all the remaining unexecuted commands will be flushed from the queue.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All successfully executed commands will be removed from the server-side queue, but if any errors occur, the erroneous command and all the remaining unexecuted commands will be flushed from the queue.

Just to be clear whether you are describing server functionality or device functionality, the removal from the queue and flushing of the queue are done on the server side, not on the device side in this library, correct?


.. include:: /includes/tfm.txt

The sample requires that private device key is installed on the device and the associated device UUID is obtained from the Identity Service.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps "requires that the device's private key" would be clearer.


<inf> nrf_provisioning_sample: Establishing LTE link ...
<inf> nrf_provisioning_http: Connected
<inf> nrf_provisioning: Disconnected from network - provisioning paused
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I assume between "Disconnected" and "Connected" on the next line, some actual provisioning is happening?

It might be nice to say so (obviously that requires a change to the code itself, not just this documentation).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point. I'll create a new PR for this.

@juhaylinen juhaylinen removed the changelog-entry-required Update changelog before merge. Remove label if entry is not needed or already added. label Jul 7, 2023

The sample supports the following development kits:

.. table-from-sample-yaml::
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps use this instead?

.. table-from-rows:: /includes/sample_board_rows.txt
   :header: heading
   :rows: nrf9161dk_nrf9161_ns


The TLS handshake needs to be done twice:

* Before requesting commands
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* Before requesting commands
* Before requesting commands.

* AT-command based provisioning commands
* Writing key-value pair based settings to the :ref:`settings_api` storage
* TLS secured HTTP as the communication protocol
* Client authentication with Attestation Token
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* Client authentication with Attestation Token
* Client authentication with attestation token

For now, HTTP is the only supported transport protocol.

* :kconfig:option:`CONFIG_NRF_PROVISIONING_SYS_INIT` - Initializes the client in the system initialization phase
* :kconfig:option:`CONFIG_NRF_PROVISIONING_ROOT_CA_SEC_TAG` - Root CA security tag for the provisioning Service
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* :kconfig:option:`CONFIG_NRF_PROVISIONING_ROOT_CA_SEC_TAG` - Root CA security tag for the provisioning Service
* :kconfig:option:`CONFIG_NRF_PROVISIONING_ROOT_CA_SEC_TAG` - Root CA security tag for the Provisioning Service


* :kconfig:option:`CONFIG_NRF_PROVISIONING_SYS_INIT` - Initializes the client in the system initialization phase
* :kconfig:option:`CONFIG_NRF_PROVISIONING_ROOT_CA_SEC_TAG` - Root CA security tag for the provisioning Service
* :kconfig:option:`CONFIG_NRF_PROVISIONING_HTTP_HOSTNAME` - HTTP API hostname for the provisioning Service
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* :kconfig:option:`CONFIG_NRF_PROVISIONING_HTTP_HOSTNAME` - HTTP API hostname for the provisioning Service
* :kconfig:option:`CONFIG_NRF_PROVISIONING_HTTP_HOSTNAME` - HTTP API hostname for the Provisioning Service

* :kconfig:option:`CONFIG_NRF_PROVISIONING_SYS_INIT` - Initializes the client in the system initialization phase
* :kconfig:option:`CONFIG_NRF_PROVISIONING_ROOT_CA_SEC_TAG` - Root CA security tag for the provisioning Service
* :kconfig:option:`CONFIG_NRF_PROVISIONING_HTTP_HOSTNAME` - HTTP API hostname for the provisioning Service
* :kconfig:option:`CONFIG_NRF_PROVISIONING_HTTP_PORT` - Port number for the provisioning Service
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* :kconfig:option:`CONFIG_NRF_PROVISIONING_HTTP_PORT` - Port number for the provisioning Service
* :kconfig:option:`CONFIG_NRF_PROVISIONING_HTTP_PORT` - Port number for the Provisioning Service

Server<<Device [label="Get commands"];
Server>>Device [label="Return commands"];
Device box Device [label="Decode commands"];
Device box Device [label="Put modem offline"];
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Device box Device [label="Put modem offline"];
Device box Device [label="Set modem offline"];

Server<<Device [label="Get commands"];
Server>>Device [label="Return commands"];
Device box Device [label="Decode commands"];
Device box Device [label="Put modem offline"];
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Device box Device [label="Put modem offline"];
Device box Device [label="Set modem offline"];

**********************

For testing the client, it is possible to enable Zephyr's shell and provisioning command, which makes it possible to control the client over UART.
Currently, only the supported subcommand makes it possible to trigger provisioning immediately.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't understand this.

Is only immediate provisioning available? Or immediate provisioning is available only using this particular subcommand?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I removed the sentence. There is now more commands available for testing.

For testing the client, it is possible to enable Zephyr's shell and provisioning command, which makes it possible to control the client over UART.
Currently, only the supported subcommand makes it possible to trigger provisioning immediately.
The feature is enabled by selecting :kconfig:option:`CONFIG_NRF_PROVISIONING_SHELL`.
The shell is meant for testing so production systems must not enable it.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
The shell is meant for testing so production systems must not enable it.
The shell is meant for testing. Do not enable it in production.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Every sentence on a separate line.

* Acts on any AT commands, if available.
* Reports the results back to the server.
In case of errors, stops processing the commands at the first error and reports it back to server.
* Sends ``FINISHED`` response if all the previous commands are executed without errors provided and ``FINISHED`` is one of the set provisioning commands.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK. So this refers specifically to something in the sample, and not the Provisioning Service.

:depth: 2

The nRF Device provisioning library enables a device to connect to nRF Cloud Provisioning Service, part of nRF Cloud Security Services.
It abstracts and hides the details of the transport and the encoding scheme that is used for the payload.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
It abstracts and hides the details of the transport and the encoding scheme that is used for the payload.
It abstracts and hides the details of the transport and encoding scheme that are used for the payload.


* AT-command based provisioning commands
* Writing key-value pair based settings to the :ref:`settings_api` storage
* TLS secured HTTP as the communication protocol
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* TLS secured HTTP as the communication protocol
* TLS-secured HTTP as the communication protocol

Configuration options for transport protocol
============================================

For now, HTTP is the only supported transport protocol.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
For now, HTTP is the only supported transport protocol.
Currently, HTTP is the only supported transport protocol.

Initialization
==============

Once initialized, the provisioning client will run on its own in the background.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Once initialized, the provisioning client will run on its own in the background.
Once initialized, the provisioning client runs on its own in the background.

==============

Once initialized, the provisioning client will run on its own in the background.
The provisioning client can be initialized in following two ways:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
The provisioning client can be initialized in following two ways:
The provisioning client can be initialized in one of the following ways:


The sample shows how the device performs the following actions:

* Connects to nRF Device provisioning Service.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the nRF Cloud service, should be 'nRF Cloud Provisioning Service'.

The sample shows how the device performs the following actions:

* Connects to nRF Device provisioning Service.
* Fetches available device specific provisioning configuration.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* Fetches available device specific provisioning configuration.
* Fetches available device-specific provisioning configuration.

**************

Device side interaction is not required.
You must define the provisioning configuration at the server side.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

.. _CONFIG_NRF_PROVISIONING_ROOT_CA_SEC_TAG:

CONFIG_NRF_PROVISIONING_ROOT_CA_SEC_TAG
Root CA security tag for the nRF Cloud (secure) Provisioning Service.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Root CA security tag for the nRF Cloud (secure) Provisioning Service.
Root CA security tag for the nRF Cloud Provisioning Service.


#. |connect_kit|
#. |connect_terminal|
#. Add provisioning command(s) to nRF Provisioning Service.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
#. Add provisioning command(s) to nRF Provisioning Service.
#. Add a provisioning configuration using the nRF Cloud Provisioning Service.

https://docs.nrfcloud.com/SecurityServices/ProvisioningService/ProvisioningConfiguration/ProvisioningConfigurationPortal.html Link could also go here instead/in addition.

@juhaylinen
Copy link
Contributor Author

@melwee01 I have updated the documentation as requested

The behavior can be overwritten by providing a unique callback function for the initialization function.

If anything is written to the modem's non-volatile memory, the modem needs to be set in offline mode.
This is because the modem cannot be connected while any data is to being written to its storage area.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
This is because the modem cannot be connected while any data is to being written to its storage area.
This is because the modem cannot be connected while any data is being written to its storage area.

To use the default implementation, ``NULL`` can be passed as an argument to the :c:func:`nrf_provisioning_init` function.
Copy and modify the default callback function as necessary.

The library starts provisioning when it initializes and, then according to the configured interval.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
The library starts provisioning when it initializes and, then according to the configured interval.
The library starts provisioning when it initializes, then according to the configured interval.

Once the memory writes are complete, the connection is re-established to report the results back to the server.
The results are reported back to the server when either all the commands succeed or when an error occurs.
If an error occurs, the results of all the commands that are successfully executed before the error and the erroneous result are reported back to the server.
All successfully executed commands will be removed from the server-side queue, but if any errors occur, the erroneous command and all the remaining unexecuted commands will be flushed from the server-side queue.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
All successfully executed commands will be removed from the server-side queue, but if any errors occur, the erroneous command and all the remaining unexecuted commands will be flushed from the server-side queue.
All successfully executed commands will be removed from the server-side queue, but if any errors occur, the erroneous command and all the remaining unexecuted commands are removed from the server-side queue.

**************

Device side interaction is not required.
You must define the provisioning configuration at the server side, see `nRF Cloud provisioning configuration`_.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
You must define the provisioning configuration at the server side, see `nRF Cloud provisioning configuration`_.
You must define the provisioning configuration at the server side. See `nRF Cloud provisioning configuration`_.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All sentences in separate lines in rst.


#. |connect_kit|
#. |connect_terminal|
#. Add a provisioning configuration using the nRF Cloud Provisioning Service, see `nRF Cloud provisioning configuration`.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
#. Add a provisioning configuration using the nRF Cloud Provisioning Service, see `nRF Cloud provisioning configuration`.
#. Add a provisioning configuration using the nRF Cloud Provisioning Service. See `nRF Cloud provisioning configuration`.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same nitpick as above.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My bad. Thanks, Pekka.

#. |connect_kit|
#. |connect_terminal|
#. Add a provisioning configuration using the nRF Cloud Provisioning Service.
#. See `nRF Cloud provisioning configuration`.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry for a further nitpick, but I think this will now render as a numbered step when it was probably intended to be a follow-up to the previous line.

@peknis, I don't know the proper formatting to suggest. What do you think?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Otherwise, LGTM.

Comment on lines 103 to 104
#. Add a provisioning configuration using the nRF Cloud Provisioning Service.
#. See `nRF Cloud provisioning configuration`.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
#. Add a provisioning configuration using the nRF Cloud Provisioning Service.
#. See `nRF Cloud provisioning configuration`.
#. Add a provisioning configuration using the nRF Cloud Provisioning Service.
See `nRF Cloud provisioning configuration`.

Add documentation for nrf_provisioning library and
sample.
Update changelog.

Signed-off-by: Juha Ylinen <juha.ylinen@nordicsemi.no>
@juhaylinen juhaylinen removed the doc-required PR must not be merged without tech writer approval. label Aug 9, 2023
@nordicjm nordicjm merged commit 97d0adc into nrfconnect:main Aug 9, 2023
13 checks passed
@juhaylinen juhaylinen deleted the provisioning_docs branch August 10, 2023 07:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants